1
2 /*
3 * $Id: src_rita.js.html,v 1.6 2012/07/19 10:39:50 dev Exp $
4 */
5 (function(window, undefined) {
6
7 /**
8 * Simple type-checking functions
9 * @private
10 */
11 Type = {
12
13 N : 'number', S : 'string', O : 'object', A :'array', B : 'boolean', R : 'regexp', F : 'function',
14
15 /**
16 * from: http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/
17 */
18 get : function(obj) {
19
20 return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
21 },
22
23 /**
24 * Returns true if the object if of type 'type, otherwise false
25 */
26 is : function(obj,type) {
27
28 return Type.get(obj) === type;
29 },
30
31 /**
32 * Throws TypeError if not the correct type, else returns true
33 */
34 ok : function(obj,type) {
35
36 if (Type.get(obj)!=type)
37 throw TypeError('Expected '+(type ? type.toUpperCase() : type+E)
38 +", received "+(obj ? Type.get(obj).toUpperCase() : obj+E));
39 return true;
40 }
41
42 } // end Type
43
44 var is = Type.is, ok = Type.ok; // aliases
45
46 // ////////////////////////////////////////////////////////////
47 // RiMarkov
48 // ////////////////////////////////////////////////////////////
49
50 /**
51 * @name RiMarkov
52 * @class Performs analysis and text generation via Markov chains (aka N-Grams)
53 * with options to process single characters, words, sentences, and
54 * arbitrary regular expressions.
55 */
56 /*
57 * <p>
58 *
59 * Provides a variety of methods specifically
60 * designed for text-generation.
61 *
62 * @example usage:<pre>
63 * RiMarkov rm = new RiMarkov(this, 3);
64 * rm.loadFile("war_peace.txt"); // in data dir.
65 * String[] sents = rm.generateSentences(10);
66 * for (int i = 0; i < sents.length; i++) {
67 * System.out.println(sents[i]);
68 * }</pre>
69
70 * Note: use RiMarkov.setTokenizerRegex() to control how inputs are tokenized (or split-up).
71 * The default is to use the Penn word-tokenizing conventions (without splitting contractions).
72 * You may wish to simply use whitespace (or some other regular expression), which
73 * can be accomplished as follows:<pre>
74 * RiMarkov rm = new RiMarkov(this, 3);
75 * rm.setTokenizerRegex("\\s");</pre>
76 *
77 *
78 * This creates a new model, with n=3, that tokenizes its
79 * input on the whitespace characters: [ \t\n\x0B\f\r].
80 *
81 * <p>
82 *
83 * Note: use RiMarkov.setAllowDuplicates(false) method to ensure that sentences that exist
84 * in the input test are not output by generate(). This method should be used with care,
85 * as certain sets of input texts (with allowDuplicates=false) may result in decreased performance
86 * and/or excessive memory use.
87 */
88 var RiMarkov = makeClass();
89
90 RiMarkov.prototype = {
91
92 /**
93 * @function
94 * @name RiMarkov
95 *
96 * Construct a Markov chain (or n-gram) model and set its n-Factor
97 *
98 * @param {number} nFactor for the model
99 * @param {boolean} caseSensitive whether the model should be case-sensitive (optional, default=false)
100 * @param {boolean} useSmoothing whether the model should be case-sensitive (optional, default=false)
101 */
102 initialize : function(nFactor, caseSensitive, useSmoothing) {
103
104 ok(nFactor,N);
105
106 this._n = nFactor;
107 this.smoothing = useSmoothing || false;
108 this.ignoresCase = !caseSensitive || true;
109 TextNode.ignoreCase = !this.ignoresCase;
110 this.root = new TextNode(null, 'ROOT');
111 },
112
113 /**
114 * Returns either the raw (unigram) probability for a single token in the model (0 if it does not exist)
115 * OR (for an array) the probability of obtaining a sequence of k tokens where k <= nFactor,
116 * e.g., if nFactor = 3, then valid lengths for the data arrau are 1, 2 & 3.
117
118 * @param {string | array} data the string (or sequence of strings) to search for
119 *
120 * @returns {number} from 0-1
121 */
122 getProbability : function(data) {
123
124 if (!this.root) err("Model not initialized: null root!");
125
126 var tn = Type.is(data,S) ? this.root.lookup(data) : this._findNode(data);
127
128 return (tn) ? tn.probability() : 0;
129
130 },
131
132 /**
133 * Returns the full set of possible next tokens, as an associative array,
134 * (mapping string -> number (probability)) given an array of tokens
135 * representing the path down the tree (with length less than n).
136 * <p>
137 * If the input array length is not less than n, or the path cannot be
138 * found, or the end-node has no children, null is returned.
139 * <p>
140 * @param {string | array} a single token or array of tokens (strings)
141 *
142 * @returns {object} associative array mapping tokens to probabilities
143 */
144 getProbabilities : function(path) {
145
146 if (Type.is(path,S)) path = [path];
147
148 if (path.length < 1 || path.length >= this._n)
149 return {};
150
151 var probs = {}, tn = this._findNode(path);
152
153 if (!tn) return {};
154
155 var nexts = tn.childNodes();
156 for ( var i = 0; i < nexts.length; i++) {
157 var node = nexts[i];
158 if (node) {
159 probs[node.token] = node.probability();
160 }
161 }
162
163 return probs;
164 // DEAD: CHANGED IN RiTa 6/16/12 //////////////////////////////////
165 },
166
167 /**
168 * Continues generating tokens until a token matches 'regex', assuming
169 * the length of the output array is between min and maxLength (inclusive).
170 *
171 * @param {string} or {object} regex The regex string or object to match against
172 * @param {number} minLength the minimum number of tokens to generate
173 * @param {number} maxLength the maximum number of tokens to generate
174 *
175 * @returns {array} strings
176 */
177 generateUntil : function(regex, minLength, maxLength){
178
179 minLength = minLength || 1, maxLength = maxLength || 99;
180
181 var mn, tokens, tries=0, maxTries=500;
182
183 OUT: while (++tries < maxTries) {
184
185 // generate the min number of tokens
186 tokens = this.generateTokens(minLength);
187
188 // keep adding one and checking until we pass the max
189 while (tokens.length < maxLength) {
190
191 mn = this._nextNode(tokens);
192
193 if (!mn || !mn.token)
194 continue OUT;// fail, restart
195
196 tokens.push(mn.token);
197
198 // check against our regex
199 if (mn.token.search(regex) >-1 )
200 return tokens;
201 }
202 }
203
204 // uh-oh, we failed
205 if (tries >= maxTries)
206 err("\n[WARN] RiMarkov failed to complete after "+tries+" attempts\n");
207
208 return tokens;
209
210 },
211
212 /**
213 * Generates a string of <pre>length</pre> tokens from the model
214 * @param {number} the target number of tokens to generate
215 * @returns {array} strings
216 */
217 generateTokens : function(targetNumber){
218
219 var tries = 0, maxTries = 500, tokens = [];
220
221 OUT: while (++tries < maxTries) {
222
223 var mn = this.root.selectChild(null, true);
224 if (!mn || !mn.token) continue OUT;
225 tokens.push(mn);
226
227 while (tokens.length < targetNumber) {
228
229 mn = this._nextNode(tokens);
230 if (!mn || !mn.token) { // hit the end
231
232 tokens = []; // start over
233 continue OUT;
234 }
235
236 tokens.push(mn);
237 }
238
239 break;
240 }
241
242 // uh-oh, looks like we failed...
243 if (tokens.length < targetNumber) {
244 err("\n[WARN] RiMarkov failed to complete after "+tries
245 +" tries, with only "+tokens.length+" successful generations...\n");
246 }
247
248 var res = [];
249 for ( var i = 0; i < tokens.length; i++) {
250 res[i] = tokens[i].token;
251 }
252
253 return res;// this._tokensToString(tokens, true);
254
255 },
256
257 /**
258 * Sets/gets whether the model ignores case in its comparisons
259 * @param {boolean} value sets the value of the flag (optional)
260 * @returns {object | number}
261 */
262 ignoreCase : function(value){
263
264 if (arguments.length) {
265
266 this.ignoresCase = value;
267 return this;
268 }
269 return this.ignoresCase;
270 },
271
272
273 /**
274 * Sets/gets the value of 'useSmoothing' to detemine
275 * whether (add-1) smoothing is enabled for the model.
276 * Note: should be called before any data loading is done.
277 * @returns {object | boolean}
278 */
279 useSmoothing : function(value) {
280
281 if (arguments.length) {
282
283 this.smoothing = value;
284 return this;
285 }
286 return this.smoothing;
287 },
288
289
290 /**
291 * TODO: does this make sense as one method?
292 *
293 * If only one array parameter is provided, this function returns all possible
294 * next words (or tokens), ordered by probability, for the given
295 * array. <p>Note: seed arrays of any size (>0) may
296 * be input, but only the last n-1 elements will be considered.
297 *
298 * @example var result = getCompletions([ "the","red"]);
299 *
300 * If two arrays are provided, it returns an unordered list of possible words <i>w</i>
301 * that complete an n-gram consisting of: pre[0]...pre[k], <i>w</i>, post[k+1]...post[n].
302 * As an example, the following call:
303 *
304 * @example var result = getCompletions([ "the" ], [ "red", "ball" ]);
305 *
306 * will return all the single words that occur between 'the' and 'red ball'
307 * in the current model (assuming n > 3), e.g., [ 'round', 'big', 'bouncy']).
308 * <p>
309 * Note: For this operation to be valid, (pre.length + post.length)
310 * must be strictly less than the model's nFactor, otherwise an
311 * exception will be thrown.
312 *
313 * @param {array} pre
314 * @param {array} post (optional)
315 *
316 * @returns {array} an unordered list of possible next tokens
317 *
318 * @private TODO: implement me!
319 */
320 getCompletions : function(pre, post) {
321
322 err('not yet implemented in RiTaJS');
323
324 /* if (!post) {
325 if (pre == null || pre.length >= nFactor)
326 throw new RiTaException("Invalid pre array: "+RiTa.asList(pre));
327
328 int postLen = post == null ? 0 : post.length;
329 if (pre.length + postLen > nFactor) {
330 throw new RiTaException("Sum of pre.length" +
331 " && post.length must be < N, was "+(pre.length+postLen));
332 }
333
334 TextNode tn = findNode(pre);
335 if (tn == null) return null;
336
337 List result = new ArrayList();
338 Collection nexts = tn.getChildNodes();
339 for (Iterator it = nexts.iterator(); it.hasNext();)
340 {
341 TextNode node = (TextNode) it.next();
342 String[] test = appendToken(pre, node.getToken());
343 if (test == null) continue;
344 for (int i = 0; i < postLen; i++)
345 test = appendToken(test, post[i]);
346 if (findNode(test) != null)
347 result.add(node.getToken());
348 }
349 return strArr(result);
350 }
351 else {
352 var seed = pre;
353 if (seed == null || seed.length == 0) {
354 System.out.println("[WARN] Null (or zero-length) seed passed to getCompletions()");
355 return null;
356 }
357 int firstLookupIdx = Math.max(0, seed.length-(nFactor-1));
358 TextNode node = rootLookup(seed[firstLookupIdx++]);
359 for (int i = firstLookupIdx; i < seed.length; i++) {
360 if (node == null) return null;
361 node = node.lookup(seed[i]);
362 }
363 if (node == null) return null;
364
365 Collection c = node.getChildMap().values();
366 if (c == null || c.size()<1) return null;
367 TextNode[] nodes = new TextNode[c.size()];
368 nodes = (TextNode[])c.toArray(nodes);
369 Arrays.sort(nodes);
370 String[] result = new String[nodes.length];
371 for (int i = 0; i < result.length; i++)
372 result[i] = nodes[i].getToken();
373 return result;
374 }*/
375
376 },
377
378 /**
379 * Returns the current n-value for the model
380 *
381 * @returns {number}
382 */
383 getN : function() {
384
385 return this._n;
386
387 },
388
389 /**
390 * Returns the number of tokens currently in the model
391 * @returns {number}
392 */
393 numTokens : function() {
394
395 return this.root.count;
396 },
397
398 /**
399 * Prints a formatted version of the model to the console
400 */
401 print : function() {
402
403 console && console.log(this.root.asTree(false));
404 },
405
406 /**
407 * Loads a text string into the model after tokenizing it.
408 *
409 * @param {string} text the string
410 * @param {number} multiplier Weighting for text (optional, default=1) <br>
411 * @param {string | regex} a regular expression to be used for tokenizing
412 * (optional, if not supplied, uses RiTa.tokenize())
413 * @see RiTa.tokenize
414 * @returns {object} this RiMarkov
415 */
416 loadText : function(text, multiplier, regex) {
417
418 return this.loadTokens(RiTa.tokenize(text,regex), multiplier);
419 },
420
421 /**
422 * Loads an array of tokens (or words) into the model; each
423 * element in the array must be a single token for proper
424 * construction of the model.
425 *
426 * @param {array} tokens the strings with which to load the model
427 * @param {number} multiplier Weighting for tokens in the array (optional, default=1) <br>
428 * @returns {object} this RiMarkov
429 */
430 loadTokens : function(tokens, multiplier) {
431
432 multiplier = multiplier || 1;
433
434 this.root.count += tokens.length; // here?
435
436 for (var toAdd, k = 0; k < tokens.length; k++)
437 {
438 toAdd = [];
439
440 for (var j = 0; j < this._n; j++)
441 {
442 if ((k+j) < tokens.length)
443 toAdd[j] = (!isNull(tokens[k+j])) ? tokens[k+j] : null;
444 else
445 toAdd[j] = null;
446 }
447
448 // hack to deal with multiplier...
449 for (var j = 0; j < multiplier; j++) {
450 var node = this.root;
451 for (var i = 0; i < toAdd.length; i++) {
452 if (node.token)
453 node = node.addChild(toAdd[i], this.smoothing ? 2 : 1);
454 }
455 }
456 }
457
458 return this;
459 },
460
461
462 _findNode : function(path) {
463
464 //log("RiMarkov.findNode("+path.toString()+")");
465
466 if (!path || !Type.is(path,A) || !path.length)
467 return null;
468
469 var nFactor = this._n;
470 var numNodes = Math.min(path.length, nFactor-1);
471 var firstLookupIdx = Math.max(0, path.length-(nFactor-1));
472 var node = this.root.lookup(path[firstLookupIdx++]);
473
474 if (!node) return null;
475
476 var idx = 0; // found at least one good node
477 var nodes = [];
478 nodes[idx++] = node;
479 for (var i = firstLookupIdx; i < path.length; i++) {
480 node = node.lookup(path[i]);
481 if (!node) return null;
482 nodes[idx++] = node;
483 }
484
485 return nodes ? nodes[nodes.length-1] : null;
486 },
487
488 _nextNode : function(previousTokens)
489 {
490 // Follow the seed path down the tree
491 var firstLookupIdx = Math.max(0, previousTokens.length-(this._n-1)),
492 node = this.root.lookup(previousTokens[firstLookupIdx++]);
493
494 for (var i = firstLookupIdx; i < previousTokens.length; i++) {
495 (node) && (node = node.lookup(previousTokens[i]));
496 }
497
498 // Now select the next node
499 return node ? node.selectChild(null, true) : null;
500 },
501
502 _tokensToString : function(tokens, addSpaces) { // not used at moment
503 var result = E;
504 for ( var i = 0; i < tokens.length; i++) {
505 if (tokens[i].token) {
506 result += tokens[i].token;
507 if (i < tokens.length-1 && addSpaces)
508 result += SP;
509 }
510 }
511 return result;
512 }
513
514 }
515
516 ///////////////////////////////////////////////////////////////////////////
517 // RiTaEvent class
518 ///////////////////////////////////////////////////////////////////////////
519
520 /**
521 * @name RiTaEvent
522 *
523 * @class Simple wrapper for event-based callbacks
524 */
525 /*
526 * @example A typical usage might be to switch on the type
527 * of a RiTaEvent within a callback:
528 <pre>
529 function onRiTaEvent(e)
530 {
531 if (e.getSource() == RiTa.BEHAVIOR_COMPLETED)
532 // ...
533 else
534 // ...
535 }
536 <pre>
537 */
538 RiTaEvent = makeClass();
539
540 RiTaEvent._callbacksDisabled = false;
541
542 RiTaEvent.prototype = {
543
544 /**
545 * Contructs a new RiTaEvent object with a source and type
546 */
547 initialize : function(sourceRiText, eventType) {
548
549 ok(sourceRiText,O);
550
551 var fn = RiTaEvent.prototype.initialize;
552 if (!fn.ID) fn.ID = 0;
553 this._id = ++(fn.ID);
554
555 this._source = sourceRiText;
556 this._type = eventType || RiText.UNKNOWN;
557 //this._data = data;
558 },
559
560
561 /** @private */
562 toString : function() {
563
564 return "RiTaEvent[#"+this._id+" type="+this._type+
565 " src="+this._source.toString()+"]";//+", data="+this._data+"]";
566
567 },
568
569 /**
570 * Gets the source for this event
571 * @returns {object} the source
572 */
573 getSource : function() {
574
575 return this._source;
576
577 },
578
579 /**
580 * Gets the type for this event
581 * @returns {string} the type
582 */
583 getType : function() {
584
585 return this._type;
586
587 },
588
589 /**
590 * Fires an event and directs it to the appropriate callback implementation
591 * @param callback
592 */
593 _fire : function(callback) {
594
595 callback = callback || window.onRiTaEvent || RiText.graphics().onRiTaEvent; // last is for P5
596
597 if (typeof callback === 'function') {
598
599 try {
600 callback.apply(this,[this]);
601 }
602 catch(err) {
603
604 RiTaEvent._callbacksDisabled = true;
605 console.warn("RiTaEvent: error calling 'onRiTaEvent' "+err);
606 throw err;
607 }
608 }
609 else if (!RiTaEvent._callbacksDisabled) {
610
611 console.warn("RiTaEvent: no 'onRiTaEvent' callback found");
612 RiTaEvent._callbacksDisabled = true;
613 }
614
615 },
616 }
617
618
619 // ////////////////////////////////////////////////////////////
620 // RiLexicon
621 // ////////////////////////////////////////////////////////////
622
623 /**
624 * @name RiLexicon
625 *
626 * @class Represents the core 'dictionary' (or lexicon) for the RiTa tools.
627 * It contains ~35,000 words augmented with phonemic and syllabic data, as well as a list of valid parts-of-speech for each.
628 * The lexicon can be extended and/or customized for additional words, usages, or pronunciations.
629 *
630 * <p> Additionally the lexicon is equipped with implementations of a variety of matching algorithms
631 * (min-edit-distance, soundex, metaphone, anagrams, alliteration, rhymes, looks-like, etc.)
632 * based on combinations of letters, syllables and phonemes.
633 * <p>
634 * Note: For performance, the data for RiLexicon is shared in a single location for ALL created instances (static)
635 * <p>
636 * Note: If you wish to modify or customize the lexicon (e.g., add words, or change pronunciations)
637 * you can do so directly, by editing the 'rita_dict.js' file, or programatically, via addWord() and removeWord()
638 *
639 * @example
640 lex = new RiLexicon(this);
641 similars = lex.similarBySound("cat");
642 rhymes = lex.getSimpleRhymes("cat");
643 // etc.
644 */
645 RiLexicon = makeClass();
646
647 // ////////////////////////////////////////////////////////////
648 // Static functions
649 // ////////////////////////////////////////////////////////////
650
651 /**
652 * Returns the singleton instance of RiLexicon
653 * Do we need this?
654 */
655 RiLexicon._getInstance = function() {
656
657 var lexicon;
658
659 try {
660 lexicon = new RiLexicon();
661 }
662 catch(e) {
663 err("No RiTa lexicon found! Have you included 'rita_dict.js'?");
664 }
665
666 RiLexicon._getInstance = function() {
667 return lexicon;
668 };
669
670 return lexicon;
671 }
672
673 // ////////////////////////////////////////////////////////////
674 // Static variables
675 // ////////////////////////////////////////////////////////////
676
677 // TODO: these need comments
678
679 RiLexicon.FEATURE_DELIM = ':';
680
681 RiLexicon.STRESSED = '1';
682
683 RiLexicon.UNSTRESSED = '0';
684
685 RiLexicon.PHONEME_BOUNDARY = '-';
686
687 RiLexicon.WORD_BOUNDARY = " ";
688
689 RiLexicon.SYLLABLE_BOUNDARY = "/";
690
691 RiLexicon.SENTENCE_BOUNDARY = "|";
692
693 RiLexicon.VOWELS = "aeiou";
694
695 /** @private */
696 RiLexicon.data = undefined; // shared static var
697
698 // ////////////////////////////////////////////////////////////
699 // Member functions
700 // ////////////////////////////////////////////////////////////
701
702 RiLexicon.prototype = {
703
704 /**
705 * Constructs an instance of the RiLexicon class.
706 * <p>
707 * Note: For performance, the data for all RiLexicon instances
708 * is shared (there is only 1 copy)
709 */
710 initialize : function() {
711
712 if (!RiLexicon.data) {
713
714 //log(typeof RiTa_DICTIONARY);
715 if (typeof RiTa_DICTIONARY != 'undefined')
716 {
717 //if (!RiTa.SILENT && console) console.log('[RiTa] Loaded lexicon data...');
718
719 RiLexicon.data = RiTa_DICTIONARY;
720 }
721 else {
722
723 err("Dictionary not found! Make sure to add it to your .html:"
724 + ", e.g.,\n\n <script src=\"path/to/rita_dict.js\"></script>");
725 }
726 }
727
728 },
729
730 /** Clears the whole lexicon */
731 clear : function() {
732
733 RiLexicon.data = undefined;
734 },
735
736 /**
737 * Adds a word to the current lexicon (not permanent)
738 *
739 * @example lexicon.addWord('abandon','ax-b ae1-n-d ax-n','vb nn vbp');
740 *
741 * @param {string} word
742 * @param {string} pronunciationData
743 * @param {string} posData
744 *
745 * @returns {object} this RiLexicon
746 */
747 addWord : function(word, pronunciationData, posData) {
748
749 RiLexicon.data[word.toLowerCase()] = [pronunciationData,posData];
750 return this;
751
752 },
753
754 /**
755 * Removes a word from the current lexicon (not permanent)
756 *
757 * @example removeWord('abandon');
758 *
759 * @param {string} word
760 * @returns {object} this RiLexicon
761 */
762 removeWord : function(word) {
763
764 delete RiLexicon.data[word];
765 return this;
766
767 },
768
769
770 /**
771 * Compares the characters of the input string (using a version of the min-edit distance algorithm)
772 * to each word in the lexicon, returning the set of closest matches.
773 *
774 * @param {string} word
775 * @param {number} minAllowedDist minimum edit distance for matches (optional, default=1)
776 * @param {boolean} preserveLength whether to return only words that match the length of the input word (optional, default=true)
777 *
778 * @returns {array} matching words
779 */
780 similarByLetter : function(input, minAllowedDist, preserveLength) {
781
782 var minVal = Number.MAX_VALUE, minLen = 2, result = [];
783
784 if (!(input && input.length)) return [];
785
786 input = input.toLowerCase();
787 minAllowedDist = minAllowedDist || 1;
788 preserveLength = preserveLength || false;
789
790 for (var entry in RiLexicon.data) {
791
792 if (preserveLength && entry.length != input.length || entry.length < minLen)
793 continue;
794
795 entry = entry.toLowerCase();
796
797 if (entry==input || entry==(input+"s")|| entry==(input+"es"))
798 continue;
799
800 var med = MinEditDist.computeRaw(entry, input);
801
802 if (med == 0) continue; // same word
803
804 // we found something even closer
805 if (med >= minAllowedDist && med < minVal) {
806
807 minVal = med;
808 result = [entry];
809 }
810
811 // we have another best to add
812 else if (med == minVal) {
813 result.push(entry);
814 }
815 }
816
817 return result;
818
819 },
820
821 /**
822 * Compares the phonemes of the input string
823 * (using a version of the min-edit distance algorithm)
824 * to each word in the lexicon, returning the set of closest matches.
825 *
826 * @param {string} input
827 * @param {number} minEditDist (optional) minimum edit distance for matches
828 * @returns {array} matching words
829 */
830 similarBySound: function(input, minEditDist) { // take options arg instead?
831
832 minEditDist = minEditDist || 1;
833
834 var minVal = Number.MAX_VALUE, entry, result = [], minLen = 2, phonesArr,
835 phones = RiTa.getPhonemes(input), med, targetPhonesArr = phones.split("-");
836
837 targetPhonesArr = phones ? phones.split("-") : [];
838
839 if (!targetPhonesArr[0] || !(input && input.length)) return [];
840
841 for (entry in RiLexicon.data) {
842
843 if (entry.length < minLen) continue;
844
845 entry = entry.toLowerCase();
846
847 if (entry==input || entry==(input+"s")|| entry==(input+"es"))
848 continue;
849
850
851 phones = this._getRawPhones(entry);
852
853 if (!phones.length) {
854
855 phones = this.syllabify(LetterToSound().getPhones(entry));
856 if (!phones) return [];
857 }
858
859 phonesArr = phones.replace(/1/g, "").replace(/ /g, "-").split('-');
860
861 med = MinEditDist.computeRaw(phonesArr, targetPhonesArr);
862
863 if (med == 0) continue; // same phones
864
865 // we found something even closer
866 if (med >= minEditDist && med < minVal) {
867
868 minVal = med;
869 result = [entry];
870 }
871 // we have another best to add
872 else if (med == minVal) {
873 result.push(entry);
874 }
875 }
876
877 return result;
878 },
879
880 /**
881 * Returns all valid substrings of the input word in the lexicon
882 *
883 * @param {string} word
884 * @param {number} minLength (optional, default=4) minimum length of return word
885 * @returns {array} matching words
886 */
887 substrings: function(word, minLength) {
888
889 minLength = minLength || (minLength === 0) || 4;
890
891 var entry, result =[];
892 for (entry in RiLexicon.data){
893 if(entry == word || entry.length < minLength ) continue;
894 if (word.indexOf(entry) >=0) result.push(entry);
895 }
896 return result;
897
898 },
899
900 /**
901 * Returns all valid superstrings of the input word in the lexicon
902 *
903 * @param {string} word
904 * @returns {array} matching words
905 */
906 superstrings: function(word) {
907
908 var entry, result =[];
909 for (entry in RiLexicon.data){
910 if(entry == word) continue;
911 if (entry.indexOf(word) >= 0) result.push(entry);
912 }
913 return result;
914
915 },
916
917 /**
918 * First calls similarBySound(), then filters the result set by the algorithm
919 * used in similarByLetter();
920 *
921 * (useful when similarBySound() returns too large a result set)
922 *
923 * @param {string} word
924 * @param {number} minEditDist (optional) minimum edit distance for both matches
925 * @returns {array} matching words
926 */
927 similarBySoundAndLetter: function(word, minEditDist) { // take options arg instead?
928
929 var simSound, simLetter, result = [];
930
931 if (isNull(minEditDist)) {
932
933 simSound = this.similarBySound(word);
934 simLetter = this.similarByLetter(word);
935 }
936 else {
937
938 simSound = this.similarBySound(word,minEditDist);
939 simLetter = this.similarByLetter(word,minEditDist);
940 }
941
942 if (isNull(simSound) || isNull(simLetter)) return result;
943
944 for (var i=0; i<simSound.length; i++) {
945
946 for (var j=0; j<simLetter.length; j++) {
947
948 if (simSound[i] == simLetter[j])
949 result.push(simLetter[j]);
950 }
951 }
952
953 return result;
954 },
955
956 /**
957 * Returns the array of all words in the lexicon or those matching a specific regex. If specified,
958 * the order of the result array is randomized before return.
959 *
960 * @param {regex} regex (string or object) pattern to match (optional)
961 * @param {boolean} randomize randomizes the order (default=false)
962 * @returns {array} words in the RiLexicon
963 */
964 getWords : function() {
965
966 var a = arguments, randomize = false, regex = undefined,
967 wordArr = [], words = Object.keys(RiLexicon.data); // TODO: replace Object.keys()
968
969 switch (a.length) {
970
971 case 2:
972
973 if (Type.is(a[0],B)) {
974 randomize = a[0];
975 regex = (Type.is(a[1],R)) ? a[1] : new RegExp(a[1]);
976 }
977 else {
978 randomize = a[1];
979 regex = (Type.is(a[0],R)) ? a[0] : new RegExp(a[0]);
980 };
981
982 break;
983
984 case 1:
985
986 if (Type.is(a[0],B)) {
987 return a[0] ? shuffle(words) : Object.keys(words);
988 }
989
990 regex = (Type.is(a[0],R)) ? a[0] : new RegExp(a[0]);
991
992 break;
993
994 case 0:
995
996 return shuffle(words);
997 }
998
999
1000 for (var i = 0; i < words.length; i++) {
1001
1002 if (words[i].match(regex)) {
1003
1004 wordArr.push(words[i]);
1005 }
1006 }
1007
1008 return randomize ? shuffle(wordArr) : wordArr;
1009
1010 },
1011
1012 /**
1013 * Returns true if c is a vowel
1014 * @param {char} c
1015 * @returns {boolean}
1016 */
1017 _isVowel : function(c) {
1018
1019 return (strOk(c) && RiLexicon.VOWELS.indexOf(c) > -1);
1020
1021 },
1022
1023 /**
1024 * Returns true if c is a consonant
1025 * @param {char} p
1026 * @returns {boolean}
1027 */
1028 _isConsonant : function(p) {
1029
1030 return (typeof p == S && p.length==1 &&
1031 RiLexicon.VOWELS.indexOf(p) < 0 && /^[a-z\u00C0-\u00ff]+$/.test(p));
1032
1033 },
1034
1035 /**
1036 * Returns true if the word exists in the lexicon
1037 * @param {string} word
1038 * @returns {boolean}
1039 */
1040 containsWord : function(word) {
1041
1042 return (strOk(word) && !isNull(RiLexicon.data[word.toLowerCase()]));
1043
1044 },
1045
1046 /**
1047 * Returns true if the two words rhyme, that is, if their final stressed phoneme
1048 * and all following phonemes are identical, else false.
1049 * <p>
1050 * Note: returns false if word1.equals(word2) or if either (or both) are null;
1051 * <p>
1052 * Note: at present doesn't use letter-to-sound engine if either word is not found in the lexicon,
1053 * but instead just returns false.
1054 *
1055 * @param {string} word1
1056 * @param {string} word2
1057 *
1058 * @returns {boolean} true if the two words rhyme, else false.
1059 */
1060 isRhyme : function(word1, word2) {
1061
1062 if ( !strOk(word1) || !strOk(word2) || equalsIgnoreCase(word1, word2))
1063 return false;
1064
1065 var p1 = this._lastStressedPhoneToEnd(word1),
1066 p2 = this._lastStressedPhoneToEnd(word2);
1067
1068 return (strOk(p1) && strOk(p2) && p1 === p2);
1069
1070 },
1071
1072 /**
1073 *
1074 * Two words rhyme if their final stressed vowel and all following phonemes are identical.
1075 * @param {string} word
1076 * @returns {array} strings of the rhymes for a given word, or empty array if none are found
1077 */
1078 getRhymes : function(word) {
1079
1080 //this._buildWordlist_();
1081
1082 if (this.containsWord(word)) {
1083
1084 var p = this._lastStressedPhoneToEnd(word);
1085 var entry, entryPhones, results = [];
1086
1087 for (entry in RiLexicon.data) {
1088 if (entry === word)
1089 continue;
1090 entryPhones = this._getRawPhones(entry);
1091
1092 if (strOk(entryPhones) && endsWith(entryPhones, p)) {
1093 results.push(entry);
1094 }
1095 }
1096 return (results.length > 0) ? results : []; // return null?
1097 }
1098
1099 return []; // return null?
1100
1101 },
1102
1103 /**
1104 * Finds alliterations by comparing the phonemes of the input string to those of each word in the lexicon
1105 *
1106 * @param {string} word input
1107 * @returns {array} strings of alliterations
1108 */
1109 getAlliterations : function(word) {
1110
1111 if (this.containsWord(word)) {
1112
1113 var c2, entry, results = [];
1114 var c1 = this._firstConsonant(this._firstStressedSyllable(word));
1115
1116 for (entry in RiLexicon.data) {
1117
1118 c2 = this._firstConsonant(this._firstStressedSyllable(entry));
1119
1120 if (c2 && c1 === c2) {
1121 results.push(entry);
1122 }
1123 }
1124 return (results.length > 0) ? results : []; // return null?
1125 }
1126 return []; // return null?
1127
1128 },
1129
1130 /**
1131 * Returns true if the first stressed consonant of the two words match, else false.
1132 *
1133 * @param {string} word1
1134 * @param {string} word2
1135 * @returns {boolean} true if word1.equals(word2) and false if either (or both) are null;
1136 */
1137 isAlliteration : function(word1, word2) {
1138
1139 if (!strOk(word1) || !strOk(word2)) return false;
1140
1141 if (equalsIgnoreCase(word1, word2)) return true;
1142
1143 var c1 = this._firstConsonant(this._firstStressedSyllable(word1)),
1144 c2 = this._firstConsonant(this._firstStressedSyllable(word2));
1145
1146 //log("'"+c1+"'=?'"+c2+"'");
1147
1148 return (strOk(c1) && strOk(c2) && c1 === c2);
1149
1150 },
1151
1152 /**
1153 * Returns the first stressed syllable of the input word
1154 * @param {string} word
1155 * @returns {string}
1156 */
1157 _firstStressedSyllable : function(word) {
1158
1159 var raw = this._getRawPhones(word), idx = -1, c, firstToEnd;
1160
1161 if (!strOk(raw)) return E; // return null?
1162
1163 idx = raw.indexOf(RiLexicon.STRESSED);
1164
1165 if (idx < 0) return E; // no stresses... return null?
1166
1167 c = raw.charAt(--idx);
1168
1169 while (c != ' ') {
1170 if (--idx < 0) {
1171 // single-stressed syllable
1172 idx = 0;
1173 break;
1174 }
1175 c = raw.charAt(idx);
1176 }
1177
1178 firstToEnd = idx === 0 ? raw : trim(raw.substring(idx));
1179 idx = firstToEnd.indexOf(' ');
1180
1181 return idx < 0 ? firstToEnd : firstToEnd.substring(0, idx);
1182
1183 },
1184
1185 /**
1186 * Returns true for 'word' if it has a verb form. That is, if any of its possible parts of speech
1187 * are any variant of a verb in the PENN part-of-speech tag set (e.g. vb, vbg, vbd, vbp, vbz));
1188 * @param {string} word the PENN part-of-speech tag
1189 * @returns {boolean} true if the word can be used as a verb
1190 */
1191 isVerb: function(word) {
1192
1193 ///if (word && word.indexOf(" ") != -1) err("Only accepts a single word"); // TODO: add test
1194
1195 var pos = RiTa.getPosTags(word);
1196 //console.log(word+":"+pos)
1197 return PosTagger.isVerb(pos.toString());
1198
1199 },
1200
1201 /**
1202 * Returns true for 'word' if it has a noun form. That is, if any of its possible parts of speech
1203 * are any variant of a noun in the PENN part-of-speech tag set(e.g. nn, nns, nnp, nnps)
1204 * @param {string} word the PENN part-of-speech tag
1205 * @returns {boolean} true if the word can be used as a noun
1206 */
1207 isNoun : function(word) {
1208
1209 if (word && word.indexOf(" ") != -1) err("Only accepts a single word"); // TODO: add test
1210
1211 //return RiTa._tagForWordNet(word) === 'n' ;
1212
1213 var pos = RiTa.getPosTags(word);
1214 return PosTagger.isNoun(pos.toString());
1215
1216 },
1217
1218 /**
1219 * Returns true for 'word' if it has an adverb form. That is, if any of its possible parts of speech
1220 * are any variant of an adverb in the PENN part-of-speech tag set (e.g. rb, rbr, rbs)
1221 * @param {string} word the PENN part-of-speech tag
1222 * @returns boolean} true if the word can be used as an adverb
1223 */
1224 isAdverb : function(word) {
1225
1226 if (word && word.indexOf(" ") != -1) err("Only accepts a single word"); // TODO: add test
1227
1228 //return RiTa.tagForWordNet(word) === 'r' ;
1229
1230 var pos = RiTa.getPosTags(word);
1231 return PosTagger.isAdverb(pos.toString());
1232
1233 },
1234
1235 /**
1236 * Returns true for 'word' if it has an adjective form. That is, if any of its possible parts of speech
1237 * are any variant of an adjective in the PENN part-of-speech tag set (e.g. jj, jjr, jjs)
1238 * @param {string} word the PENN part-of-speech tag
1239 * @returns {boolean} true if the word can be used as an adjective
1240 */
1241 isAdjective : function(word) {
1242
1243 if (word && word.indexOf(" ") != -1) err("Only accepts a single word"); // TODO: add test
1244
1245 //return RiTa._tagForWordNet(word) === 'a' ;
1246
1247 var pos = RiTa.getPosTags(word);
1248 return PosTagger.isAdj(pos.toString());
1249
1250 },
1251
1252
1253 /**
1254 * Returns a String containing the phonemes for each syllable of each word of the input text,
1255 * delimited by dashes (phonemes) and semi-colons (words). For example, the 4 syllables of the phrase
1256 * 'The dog ran fast' is "dh-ax:d-ao-g:r-ae-n:f-ae-s-t".
1257 *
1258 * @param {string} word
1259 *
1260 * @returns {string} the phonemes for each syllable of each word, or null if no text has been input.
1261 */
1262 _getSyllables : function(word) {
1263
1264 if (!Type.is(word,S)) err('Bad type');
1265
1266 if (!word.length) return E;
1267
1268 var wordArr = RiTa.tokenize((word)), phones, raw = [];
1269
1270 for (var i=0; i< wordArr.length; i++) {
1271
1272 raw[i] = this._getRawPhones(wordArr[i]).replace(/ /g, "/");
1273 }
1274
1275 return RiTa.untokenize(raw).replace(/1/g, "").trim();
1276
1277 },
1278
1279 /**
1280 * Returns a String containing all phonemes for the input text, delimited by semi-colons,
1281 * or null if not found
1282 *
1283 * @example "dh:ax:d:ao:g:r:ae:n:f:ae:s:t"
1284 *
1285 * @param {string} word
1286 *
1287 * @returns {string} all phonemes, or null if not found
1288 */
1289 _getPhonemes : function(word) {
1290
1291 if (!word || !word.length) return null;
1292
1293 var wordArr = RiTa.tokenize(word), raw = [];
1294
1295 for (var i=0; i< wordArr.length; i++)
1296 {
1297
1298 if (RiTa.isPunctuation(wordArr[i])) continue;
1299
1300 // raw[i] = wordArr[i].length
1301 raw[i] = this._getRawPhones(wordArr[i]);
1302
1303 if (!raw[i].length) return null;
1304 //err("Unable to lookup (need LTSEngine): "+wordArr[i]);
1305
1306 raw[i] = raw[i].replace(/ /g, "-");
1307 }
1308
1309 return RiTa.untokenize(raw).replace(/1/g, E).trim();
1310 },
1311
1312 /**
1313 * Returns a String containing the stresses for each syllable of the input text, delimited by semi-colons,
1314 * @example "0:1:0:1", with 1's meaning 'stressed', and 0's meaning 'unstressed',
1315 *
1316 * @param {string} word
1317 *
1318 * @returns {string} stresses for each syllable, or null if no text has been input.
1319 */
1320 _getStresses : function(words) {
1321
1322 var stresses = [], phones, raw = [],
1323 wordArr = Type.is(words,A) ? words : RiTa.tokenize(words);
1324
1325 if (!words.length) return stresses;
1326
1327 for (var i=0; i< wordArr.length; i++) {
1328
1329 if (!RiTa.isPunctuation(wordArr[i]))
1330 raw[i] = this._getRawPhones(wordArr[i]);
1331 }
1332
1333 for (var i = 0; i < raw.length; i++) {
1334
1335 if (raw[i]) { // ignore undefined array items (eg Punctuation)
1336
1337 phones = raw[i].split(SP);
1338 for (var j = 0; j < phones.length; j++) {
1339
1340 var isStress = (phones[j].indexOf(RiLexicon.STRESSED) > -1)
1341 ? RiLexicon.STRESSED : RiLexicon.UNSTRESSED;
1342
1343 if (j > 0) isStress = "/" + isStress;
1344
1345 stresses.push(isStress);
1346 }
1347 }
1348 }
1349
1350 return stresses.join(" ").replace(/ \//g, "/");
1351
1352 },
1353
1354 /**
1355 * Returns the raw dictionary data used to create the default lexicon
1356 * @returns {object} dictionary mapping words to their pronunciation/pos data
1357 */
1358 getLexicalData : function() {
1359
1360 return RiLexicon.data;
1361
1362 },
1363
1364 /**
1365 * Allows one to set the raw dictionary data used to create the default lexicon.
1366 * See RiLexicon.addWord() for data format
1367 *
1368 * @param {object} dictionaryDataObject mapping words to their pronunciation/pos data
1369 * @returns {object} this RiLexicon
1370 */
1371 setLexicalData : function(dictionaryDataObject) {
1372
1373 RiLexicon.data = dictionaryDataObject;
1374
1375 return RiLexicon.data;
1376
1377 },
1378
1379 /**
1380 * Returns the raw dictionary entry for the given word (isn't necessary in typical usage)
1381 *
1382 * @param {string} word
1383 *
1384 * @returns {array} a 2-element array of strings,
1385 * the first is the stress and syllable data,
1386 * the 2nd is the pos data,
1387 * or null if not found
1388 */
1389 _lookupRaw : function(word) {
1390
1391 word = word.toLowerCase();
1392
1393 if (RiLexicon.data[word]) return RiLexicon.data[word];
1394
1395 log("[RiTa] No lexicon entry for '" + word + "'");
1396
1397 return null; // if private, should return 'undefined' or null?
1398
1399 },
1400
1401
1402 _getRawPhones : function(word) {
1403
1404 var data = this._lookupRaw(word);
1405 return (data && data.length==2) ? data[0] : E; // TODO: verify
1406
1407 },
1408
1409
1410 _getPosData : function(word) {
1411
1412 var data = this._lookupRaw(word);
1413 return (data && data.length==2) ? data[1] : E; // TODO: verify
1414
1415 },
1416
1417
1418 _getPosArr : function(word) { // SHOULD BE PRIVATE
1419
1420 var pl = this._getPosData(word);
1421
1422 if (!strOk(pl)) return []; // TODO: verify
1423
1424 return pl.split(SP);
1425
1426 },
1427
1428
1429 _firstConsonant : function(rawPhones) {
1430
1431 if (!strOk(rawPhones)) return E; // return null?
1432
1433 var phones = rawPhones.split(RiLexicon.PHONEME_BOUNDARY);
1434 // var phones = rawPhones.split(PHONEME_BOUNDARY);
1435
1436 if (!isNull(phones)) {
1437
1438 for (var j = 0; j < phones.length; j++) {
1439 if (this._isConsonant(phones[j].charAt(0))) // first letter only
1440 return phones[j];
1441 }
1442 }
1443 return E; // return null?
1444
1445 },
1446
1447
1448 _lastStressedPhoneToEnd : function(word) {
1449
1450 if (!strOk(word)) return E; // return null?
1451
1452 var idx, c, result;
1453 var raw = this._getRawPhones(word);
1454
1455 if (!strOk(raw)) return E; // return null?
1456
1457 idx = raw.lastIndexOf(RiLexicon.STRESSED);
1458
1459 if (idx < 0) return E; // return null?
1460
1461 c = raw.charAt(--idx);
1462 while (c != '-' && c != ' ') {
1463 if (--idx < 0) {
1464 return raw; // single-stressed syllable
1465 }
1466 c = raw.charAt(idx);
1467 }
1468 result = raw.substring(idx + 1);
1469
1470 return result;
1471
1472 },
1473
1474 /**
1475 * Returns a random word from the lexicon
1476 *
1477 * @param {string} pos (optional)
1478 * @param {string} syllableCount (optional)
1479 * @returns {string} random word
1480 */
1481 getRandomWord : function() { // takes nothing, pos, syllableCount, or both
1482
1483 var found = false, a = arguments, wordArr = Object.keys(RiLexicon.data),
1484 ran = Math.floor(Math.random() * Object.keys(RiLexicon.data).length),
1485 ranWordArr = shuffle(wordArr);
1486
1487 switch (a.length) {
1488
1489 case 2: //a[0]=pos a[1]=syllableCount
1490
1491 a[0] = trim(a[0].toUpperCase());
1492
1493 for(var j = 0; j < PosTagger.TAGS.length; j++) {
1494
1495 if (PosTagger.TAGS[j] == a[0]) found = true;
1496 }
1497
1498 if (found) {
1499
1500 for(var i=0; i< ranWordArr.length; i++){
1501
1502 var data = this._lookupRaw(ranWordArr[i]);
1503 var posTag = RiTa.getPosTags(ranWordArr[i]);
1504
1505 if (data[0].split(" ").length == a[1] && a[0] == posTag[0].toUpperCase()) {
1506 return ranWordArr[i];
1507 }
1508 }
1509 }
1510
1511 return E;
1512
1513 break;
1514
1515 case 1:
1516
1517 if (Type.is(a[0],S)) { //pos
1518
1519 a[0] = trim(a[0].toUpperCase());
1520
1521 for(var j = 0; j < PosTagger.TAGS.length; j++) {
1522
1523 if (PosTagger.TAGS[j] == a[0]) found = true;
1524 }
1525
1526 if (found) {
1527
1528 for(var i=0; i< ranWordArr.length; i++){
1529
1530 var posTag = RiTa.getPosTags(ranWordArr[i]);
1531
1532 if (a[0] == posTag[0].toUpperCase()) {
1533 return ranWordArr[i];
1534 }
1535 }
1536 }
1537 }
1538
1539 else { //syllableCount
1540
1541 for(var i=0; i< ranWordArr.length; i++) {
1542
1543 var data = this._lookupRaw(ranWordArr[i]);
1544
1545 if (data[0].split(" ").length == a[0]) {
1546
1547 return ranWordArr[i];
1548 }
1549 }
1550 }
1551
1552 break;
1553
1554 case 0:
1555
1556 return wordArr[ran];
1557 }
1558 return E;
1559
1560 },
1561
1562 }
1563
1564 Phones = {
1565
1566 consonants: [ 'b', 'ch', 'd', 'dh', 'f', 'g', 'hh', 'jh', 'k', 'l', 'm', 'n',
1567 'ng', 'p', 'r', 's', 'sh', 't', 'th', 'v', 'w', 'y', 'z', 'zh' ],
1568
1569 vowels: [ 'aa', 'ae', 'ah', 'ao', 'aw', 'ax', 'ay', 'eh', 'er', 'ey', 'ih', 'iy',
1570 'ow', 'oy', 'uh', 'uw' ],
1571
1572 onsets: [ 'p', 't', 'k', 'b', 'd', 'g', 'f', 'v', 'th', 'dh', 's', 'z', 'sh', 'ch', 'jh', 'm',
1573 'n', 'r', 'l', 'hh', 'w', 'y', 'p r', 't r', 'k r', 'b r', 'd r', 'g r', 'f r',
1574 'th r', 'sh r', 'p l', 'k l', 'b l', 'g l', 'f l', 's l', 't w', 'k w', 'd w',
1575 's w', 's p', 's t', 's k', 's f', 's m', 's n', 'g w', 'sh w', 's p r', 's p l',
1576 's t r', 's k r', 's k w', 's k l', 'th w', 'zh', 'p y', 'k y', 'b y', 'f y',
1577 'hh y', 'v y', 'th y', 'm y', 's p y', 's k y', 'g y', 'hh w', '' ],
1578
1579 digits: [ 'z-ih-r-ow', 'w-ah-n', 't-uw', 'th-r-iy', 'f-ao-r', 'f-ay-v', 's-ih-k-s',
1580 's-eh1-v-ax-n', 'ey-t', 'n-ih-n' ]
1581 }
1582
1583 ////////////////////////////////////////////////////////////////
1584 // RiString
1585 ////////////////////////////////////////////////////////////////
1586
1587 //RiString.DEFAULT_FEATURES = [ 'Phonemes', 'Stresses', 'Words', 'Syllables' ];
1588
1589 /**
1590 * @name RiString
1591 *
1592 * @class The basic text container object, implementing a variety of
1593 * additional functionality atop the javascript string object
1594 */
1595 RiString = makeClass();
1596
1597
1598 // ////////////////////////////////////////////////////////////
1599 // Member functions
1600 // ////////////////////////////////////////////////////////////
1601
1602 RiString.prototype = {
1603
1604 /**
1605 * The RiString constructor function
1606 *
1607 * @param {string} the text
1608 */
1609 initialize : function(text) {
1610
1611 Type.ok(text,S);
1612 this._text = text;
1613 this.features = undefined;
1614 },
1615
1616 /**
1617 * Computes a set of features for the contained string, including
1618 * phonemes, syllables, stresses, etc.
1619 * To access any of these, use get(name), e.g.,
1620 *
1621 * @example myRiString.get('phonemes') || myRiString.get(RiTa.PHONEMES);
1622 *
1623 * @returns this RiString
1624 */
1625 analyze : function() {
1626
1627 var words = (this._text.indexOf(SP) ? RiTa.tokenize(this._text) : [this._text]),
1628 lex = RiLexicon._getInstance(), slash = '/', stressyls, raw, delim = '-',
1629 phonemes = E, syllables = E, stresses = E, lts;
1630
1631 this.features = this.features || {};
1632
1633 for (var i = 0, l = words.length; i < l; i++) {
1634
1635 raw = lex._getRawPhones(words[i]);
1636
1637 if (!raw) {
1638
1639 if (!RiTa.SILENT && console)
1640 console.log("[RiTa] Using LTS for '"+words[i]+"'");
1641
1642 lts = lts || LetterToSound();
1643 raw = this.syllabify(lts.getPhones(words[i]));
1644 }
1645
1646 phonemes += raw.replace(/[0-2]/g, E).replace(/ /g, delim) + SP;
1647 syllables += raw.replace(/ /g, slash).replace(/1/g, E) + SP;
1648
1649 stressyls = raw.split(SP);
1650 for (var j = 0; j < stressyls.length; j++) {
1651
1652 if (!stressyls[j].length) continue;
1653
1654 stresses += (stressyls[j].indexOf(RiLexicon.STRESSED) > -1)
1655 ? RiLexicon.STRESSED : RiLexicon.UNSTRESSED;
1656
1657 if (j < stressyls.length-1) stresses += slash;
1658 }
1659 if (!endsWith(stresses, SP)) stresses += SP;
1660 }
1661 this.features.phonemes = phonemes.trim();
1662 this.features.stresses = stresses.trim();
1663 this.features.syllables = syllables.trim();
1664
1665 //log(this.features);
1666
1667 return this;
1668 },
1669
1670
1671 /**
1672 * Syllabifies the input, given a string of phonemes from the CMU pronouncing dictionary set
1673 * (with optional stress numbers after vowels), or an array of phonemes, e.g. "B AE1 T" or ["B", "AE1", "T"]'''
1674 *
1675 * @param {string or array} input containing
1676 * @returns {string}
1677 */
1678 syllabify : function(input) {
1679
1680 var dbug, None=undefined, internuclei = [], syllables = [], // returned data structure.
1681 sylls = ((typeof (input) == 'string') ? input.split('-') : input);
1682
1683 for (var i = 0; i < sylls.length; i++) {
1684
1685 var phoneme = sylls[i].trim(), stress = None;
1686
1687 if (!phoneme.length) continue;
1688
1689 if ( isNum(last(phoneme)) ) {
1690
1691 stress = parseInt(last(phoneme));
1692 phoneme = phoneme.substring(0, phoneme.length-1);
1693 }
1694
1695 if(dbug)console.log(i+")"+phoneme + ' stress='+stress+' inter='+internuclei.join(':'));
1696
1697 if (inArray(Phones.vowels, phoneme)) {
1698
1699 // Split the consonants seen since the last nucleus into coda and onset.
1700 var coda = None, onset = None;
1701
1702 // Make the largest onset we can. The 'split' variable marks the break point.
1703 for (var split = 0; split < internuclei.length+1; split++) {
1704
1705 coda = internuclei.slice(0, split);
1706 onset = internuclei.slice(split, internuclei.length);
1707
1708 if(dbug)console.log(' '+split+') onset='+onset.join(':')+' coda='+coda.join(':')+' inter='+internuclei.join(':'));
1709
1710 // If we are looking at a valid onset, or if we're at the start of the word
1711 // (in which case an invalid onset is better than a coda that doesn't follow
1712 // a nucleus), or if we've gone through all of the onsets and we didn't find
1713 // any that are valid, then split the nonvowels we've seen at this location.
1714 var bool = inArray(Phones.onsets, onset.join(" "));
1715 if (bool || syllables.length == 0 || onset.length == 0) {
1716 if(dbug)console.log(' break '+phoneme);
1717 break;
1718 }
1719 }
1720
1721 //if(dbug)console.log(' onset='+join(',',onset)+' coda='+join(',',coda));
1722
1723 // Tack the coda onto the coda of the last syllable. Can't do it if this
1724 // is the first syllable.
1725 if (syllables.length > 0 ) {
1726
1727 //syllables[syllables.length-1][3] = syllables[syllables.length-1][3] || [];
1728 //console.log(' len='+syllables[syllables.length-1][3].length);
1729 extend(syllables[syllables.length-1][3], coda);
1730 if(dbug)console.log(' tack: '+coda+' -> len='+syllables[syllables.length-1][3].length+" ["+syllables[syllables.length-1][3]+"]");
1731 }
1732
1733 // Make a new syllable out of the onset and nucleus.
1734
1735 var toPush = [ [stress], onset, [phoneme], [] ];
1736 syllables.push(toPush);
1737
1738 // At this point we've processed the internuclei list.
1739 internuclei = [];
1740 }
1741
1742 else if (!inArray(Phones.consonants, phoneme) && phoneme != " ") {
1743 throw Error('Invalid phoneme: ' + phoneme);
1744 }
1745
1746 else { // a consonant
1747
1748 //console.log('inter.push: '+phoneme);
1749 internuclei.push(phoneme)
1750 }
1751 }
1752
1753
1754 // Done looping through phonemes. We may have consonants left at the end.
1755 // We may have even not found a nucleus.
1756 if (internuclei.length > 0) {
1757
1758 if (syllables.length == 0) {
1759
1760 syllables.push([ [None], internuclei, [], [] ]);
1761 }
1762 else {
1763
1764 extend(syllables[syllables.length-1][3], internuclei);
1765 }
1766
1767 }
1768
1769 //if(dbug)console.log((syllables));
1770
1771 return this._stringify(syllables);
1772 },
1773
1774 /*
1775 * Takes a syllabification and turns it into a string of phonemes,
1776 * delimited with dashes, and spaces between syllables
1777 */
1778 _stringify : function(syllables) {
1779
1780 var ret = [];
1781 for (var i = 0; i < syllables.length; i++) {
1782
1783 var syl = syllables[i];
1784 var stress = syl[0][0];
1785 var onset = syl[1];
1786 var nucleus = syl[2];
1787 var coda = syl[3];
1788
1789 if (stress != undefined && nucleus.length) // dch
1790 nucleus[0] += (''+stress);
1791
1792 var data = [];
1793 for (var j = 0; j < onset.length; j++)
1794 data.push(onset[j]);
1795
1796 for (var j = 0; j < nucleus.length; j++)
1797 data.push(nucleus[j]);
1798
1799 for (var j = 0; j < coda.length; j++)
1800 data.push(coda[j]);
1801
1802 ret.push(data.join('-'));
1803 }
1804
1805 return ret.join(' ');
1806 },
1807
1808
1809 // TMP: remove
1810 _splitSyllables : function(word) {
1811
1812 //console.log('_splitSyllables='+word);
1813
1814 var str = E, res = [], phones = word.split('-'), gotFirstVowel = false;
1815
1816 for (var j = 0; j < phones.length; j++) {
1817
1818
1819 var isVowel = RiLexicon._getInstance()._isVowel(phones[j].charAt(0));
1820 if (isVowel) {
1821
1822 if (gotFirstVowel) {
1823
1824 res.push(str.substring(0,str.length-1));
1825 str = phones[j];
1826 if (j < phones.length-1)
1827 str += '-';
1828 }
1829 else {
1830
1831 gotFirstVowel = true;
1832 str += phones[j];
1833 if (j < phones.length-1)
1834 str += '-';
1835 }
1836 continue;
1837 }
1838
1839 //console.log(j+") "+phones[j]+","+frst);
1840 str += phones[j];
1841 if (j < phones.length-1)
1842 str += '-';
1843 }
1844
1845 res.push(str);
1846
1847 return res;
1848 },
1849
1850 _countChar : function(word,char)
1851 {
1852 var count = 0;
1853 for (var i = 0; i < word.length; i++) {
1854 if (word.charAt(i)==char) count++;
1855 }
1856 return count;
1857 },
1858
1859 /**
1860 * Returns the specified feature, computing it first if necessary.
1861 * Default features include RiTa.STRESSES, RiTa.PHONEMES, and RiTa.SYLLABLES.
1862 *
1863 * @example myRiString.get('phonemes') || myRiString.get(RiTa.PHONEMES);
1864 *
1865 * @returns {string} the requested feature
1866 */
1867 get : function(featureName) {
1868
1869 this.features || this.analyze();
1870 return this.features[featureName.toLowerCase()];
1871
1872 },
1873
1874
1875 /**
1876 * Tests if this string ends with the specified suffix.
1877 *
1878 * @param {string} substr string the suffix.
1879 *
1880 * @returns {boolean} true if the character sequence represented by the argument is a suffix of
1881 * the character sequence represented by this object; false otherwise. *
1882 */
1883 endsWith : function(substr) {
1884
1885 return endsWith(this._text, substr);
1886
1887 },
1888
1889 /**
1890 * Compares this RiString to the specified object. The result is true if and only if the
1891 * argument is not null and is a RiString object that represents the same sequence of
1892 * characters as this object.
1893 *
1894 * @param {object} riString RiString object to compare this RiString against.
1895 * @returns {boolean} true if the RiString are equal; false otherwise.
1896 */
1897 equals : function(riString) {
1898
1899 return riString._text === this._text;
1900
1901 },
1902
1903 /**
1904 * Compares this RiString to another RiString, ignoring case considerations.
1905 *
1906 * @param {string | object} str String or RiString object to compare this RiString against
1907 * @returns {boolean} true if the argument is not null and the Strings are equal, ignoring
1908 * case; false otherwise.
1909 */
1910 equalsIgnoreCase : function(str) {
1911
1912 if (typeof str === S) {
1913
1914 return str.toLowerCase() === this._text.toLowerCase();
1915 }
1916 else {
1917
1918 return str.text().toLowerCase() === this._text.toLowerCase();
1919 }
1920
1921 },
1922
1923 /**
1924 * Gets/sets the text contained by this object
1925 *
1926 * @param {string} text (optional)
1927 *
1928 * @returns {object | string} the contained text (for sets) or this RiString (for gets)
1929 */
1930 text : function(theText) {
1931
1932 if (arguments.length>0) {
1933 this._text = theText;
1934 this.features = undefined;
1935 return this;
1936 }
1937 return this._text;
1938
1939 },
1940
1941 /**
1942 * Returns an array of part-of-speech tags, one per word, using RiTa.tokenize() and RiTa.posTag().
1943 *
1944 * @returns {array} strings of pos, one per word
1945 */
1946 pos : function() {
1947
1948 var words = RiTa.tokenize((this._text)); // was getPlaintext()
1949 var tags = PosTagger.tag(words);
1950
1951 for ( var i = 0, l = tags.length; i < l; i++) {
1952 if (!strOk(tags[i]))
1953 err("RiString: can't parse pos for:" + words[i]);
1954 }
1955
1956 return tags;
1957
1958 },
1959
1960 /**
1961 * Returns the part-of-speech tag for the word at 'index', using RiTa.tokenize() and RiTa.posTag().
1962 *
1963 * @param {number} index the word index
1964 * @returns {string} the pos
1965 */
1966 posAt : function(index) {
1967
1968 var tags = this.pos();
1969
1970 if (isNull(tags) || tags.length == 0 || index < 0 || index >= tags.length)
1971 return E;
1972
1973 return tags[index];
1974
1975 },
1976
1977 /**
1978 * Returns the word at 'index', according to RiTa.tokenize()
1979 *
1980 * @param {number} index the word index
1981 * @returns {string} the word
1982 */
1983 wordAt : function(index) {
1984
1985 var words = RiTa.tokenize((this._text));
1986 if (index < 0 || index >= words.length)
1987 return E;
1988 return words[index];
1989
1990 },
1991
1992 /**
1993 * Returns the number of words in the object, according to RiTa.tokenize().
1994 *
1995 * @returns {number} number of words
1996 */
1997 wordCount : function() {
1998
1999 if (!this._text.length) return 0;
2000 return this.words().length;
2001
2002 },
2003
2004 /**
2005 * Returns the array of words in the object, via a call to RiTa.tokenize().
2006 *
2007 * @returns {array} strings, one per word
2008 */
2009 words : function() { //TODO: change to words()
2010
2011 return RiTa.tokenize(this._text);
2012
2013 },
2014
2015 /**
2016 * Returns the index within this string of the first occurrence of the specified character.
2017 *
2018 * @param {string} searchstring (Required) or character to search for
2019 * @param {number} start (Optional) The start position in the string to start the search. If omitted,
2020 * the search starts from position 0
2021 * @returns {number} the first index of the matching pattern or -1 if none are found
2022 */
2023 indexOf : function(searchstring, start) {
2024
2025 return this._text.indexOf(searchstring, start);
2026
2027 },
2028
2029 /**
2030 * Inserts 'newWord' at 'wordIdx' and shifts each subsequent word accordingly.
2031 *
2032 * @returns {object} this RiString
2033 */
2034 insertWordAt : function(newWord, wordIdx) {
2035
2036 var words = this.words();
2037 if (newWord && newWord.length && wordIdx >= 0 && wordIdx < words.length) {
2038
2039 // filthy hack to preserve punctuation in 'newWord'
2040 words.splice(wordIdx,0, DeLiM+newWord+DeLiM);
2041
2042
2043 this.text( RiTa.untokenize(words).replace(new RegExp(DeLiM,'g'),E) );
2044 }
2045
2046 return this;
2047
2048 },
2049
2050 /**
2051 * Returns the index within this string of the last occurrence of the specified character.
2052 *
2053 * @param {string} searchstring The string to search for
2054 * @param {number} start (Optional) The start position in the string to start the search. If omitted,
2055 * the search starts from position 0
2056 *
2057 * @returns {number} the last index of the matching pattern or -1 if none are found
2058 */
2059 lastIndexOf : function(searchstring, start) {
2060
2061 return this._text.lastIndexOf(searchstring, start);
2062
2063 },
2064
2065 /**
2066 * Returns the length of this string.
2067 *
2068 * @returns {number} the length
2069 */
2070 length : function() {
2071
2072 return this._text.length;
2073
2074 },
2075
2076 /**
2077 * Searches for a match between a substring (or regular expression) and the contained
2078 * string, and _returns the matches
2079 *
2080 * @param {string} regex Regular expression
2081 * @returns {array} strings matches or empty array if none are found
2082
2083 */
2084 match : function(regex) {
2085
2086 var result = this._text.match(regex);
2087 if(isNull(result)){return [];} else {return result;}
2088
2089 },
2090
2091
2092 /**
2093 * Extracts a part of a string from this RiString
2094 *
2095 * @param {number} begin (Required) The index where to begin the extraction. First character is at
2096 * index 0
2097 * @param {number} end (Optional) Where to end the extraction. If omitted, slice() selects all
2098 * characters from the begin position to the end of the string
2099 * @returns {object} this RiString
2100 */
2101 slice : function(begin, end) {
2102
2103 var res = this._text.slice(begin, end) || E;
2104 return this.text(res);
2105
2106 },
2107
2108 /**
2109 * Replaces each substring of this string that matches the given regular expression with the
2110 * given replacement.
2111 *
2112 * @param {string | regex } pattern the pattern to be matched
2113 * @param {string} replacement the replacement sequence of char values
2114 * @returns {object} this RiString
2115 */
2116 replaceAll : function(pattern, replacement) {
2117
2118 if (pattern && (replacement || replacement==='')) {
2119 this._text = replaceAll(this._text, pattern, replacement);
2120 }
2121 return this;
2122
2123 },
2124
2125 /**
2126 * Replaces the character at 'idx' with 'replaceWith'. If the specified 'idx' is less than
2127 * zero, or beyond the length of the current text, there will be no effect.
2128 *
2129 * @param {number} idx the character index
2130 * @param {string} replaceWith the replacement
2131 * @returns {object} this RiString
2132 */
2133 replaceCharAt : function(idx, replaceWith) {
2134
2135 if (idx < 0 || idx >= this.length())
2136 return this;
2137
2138 var s = this.text();
2139 var beg = s.substring(0, idx);
2140 var end = s.substring(idx + 1);
2141 var s2 = null;
2142
2143 if (replaceWith)
2144 s2 = beg + replaceWith + end;
2145 else
2146 s2 = beg + end;
2147
2148 return this.text(s2);
2149
2150 },
2151
2152 /**
2153 * Replaces the first instance of 'regex' with 'replaceWith'
2154 *
2155 * @param {string | regex} regex the pattern
2156 * @param {string} replaceWith the replacement
2157 *
2158 * @returns this RiString
2159 */
2160 replaceFirst : function(regex, replaceWith) {
2161
2162 this._text = this._text.replace(regex, replaceWith);
2163 return this;
2164 },
2165
2166 /**
2167 * Replaces the last instance of 'regex' with 'replaceWith'
2168 *
2169 * @param {string | regex} regex the pattern
2170 * @param {string} replaceWith the replacement
2171 *
2172 * @returns this RiString
2173 */
2174 replaceLast : function(regex, replaceWith) {
2175
2176 if (!regex) return this;
2177
2178 if (Type.is(regex,S)) {
2179 log('creating regex for: '+regex);
2180 regex = new RegExp(regex);
2181 }
2182
2183 log('regex: '+regex);
2184
2185 var ret = this._text;
2186
2187 if (ret.match(regex)) {
2188 var target = RegExp.lastMatch;
2189 var tmp = this._text.split(target);
2190 var last = tmp.pop();
2191 tmp[tmp.length-1] += replaceWith + last;
2192 ret = tmp.join(target);
2193 }
2194
2195 this._text = ret;
2196
2197 return this;
2198
2199 // if (this._text.lastIndexOf(regex)>=0){ //this do not work for regex..
2200 // var ind = this._text.lastIndexOf(regex);
2201 // var before = this._text.substring(0, ind);
2202 // var after = this._text.substring(ind+regex.length);
2203 //
2204 // var finished = before + replaceWith + after;
2205 // this._text = finished;
2206 // return this;
2207 // }
2208 // }
2209 },
2210
2211 /**
2212 * Replaces the word at 'wordIdx' with 'newWord'
2213 *
2214 * @param {number} wordIdx the index
2215 * @param {string} newWord the replacement
2216 *
2217 * @returns {object} this RiString
2218 */
2219 replaceWordAt : function(wordIdx, newWord) {
2220
2221 var words = this.words();
2222
2223 if (wordIdx >= 0 && wordIdx < words.length) {
2224
2225 words[wordIdx] = newWord;
2226
2227 this.text(RiTa.untokenize(words));
2228 }
2229
2230 return this;
2231
2232 },
2233
2234 /**
2235 * Split a RiString into an array of sub-RiString and return the new array.
2236 *
2237 * If an empty string ("") is used as the separator, the string is split between each character.
2238 *
2239 * @param {string} separator (Optional) Specifies the character to use for splitting the string. If
2240 * omitted, the entire string will be returned. If an empty string ("") is used as the separator,
2241 * the string is split between each character.
2242 *
2243 * @param {number} limit (Optional) An integer that specifies the number of splits
2244 *
2245 * @returns {array} RiStrings
2246 */
2247 split : function(separator, limit) {
2248
2249 var parts = this._text.split(separator, limit);
2250 var rs = [];
2251 for ( var i = 0; i < parts.length; i++) {
2252 if (!isNull(parts[i]))
2253 rs.push(new RiString(parts[i]));
2254 }
2255 return rs;
2256
2257 },
2258
2259 /**
2260 * Tests if this string starts with the specified prefix.
2261 *
2262 * @param {string} substr string the prefix
2263 * @returns {boolean} true if the character sequence represented by the argument is a prefix of
2264 * the character sequence represented by this string; false otherwise. Note also
2265 * that true will be returned if the argument is an empty string or is equal to this
2266 * RiString object as determined by the equals() method.
2267 */
2268 startsWith : function(substr) {
2269
2270 return this.indexOf(substr) == 0;
2271
2272 },
2273
2274 /**
2275 * Extracts the characters from this objects contained string, beginning at 'start' and
2276 * continuing through the specified number of characters, and sets the current text to be
2277 * that string. (from Javascript String)
2278 *
2279 * @param {number} start The index where to start the extraction. First character is at
2280 * index 0
2281 * @param {number} length (optional) The index where to stop the extraction. If omitted, it extracts the
2282 * rest of the string
2283 * @returns {object} this RiString
2284 */
2285 substr : function(start, length) {
2286
2287 var res = this._text.substr(start, length);
2288 return this.text(res);
2289
2290 },
2291
2292 /**
2293 * Extracts the characters from a string, between two specified indices, and sets the
2294 * current text to be that string.
2295 *
2296 * @param {number} from The index where to start the extraction. First character is at
2297 * index 0
2298 * @param {number} to (optional) The index where to stop the extraction. If omitted, it extracts the
2299 * rest of the string
2300 * @returns {object} this RiString
2301 */
2302 substring : function(from, to) {
2303
2304 return this.text(this._text.substring(from, to));
2305
2306 },
2307
2308 /**
2309 * Converts this object to an array of RiString objects, one per character
2310 *
2311 * @returns {array} RiStrings with each letter as its own RiString element
2312 */
2313 toCharArray : function() {
2314 var parts = this._text.split(E);
2315 var rs = [];
2316 for ( var i = 0; i < parts.length; i++) {
2317 if (!isNull(parts[i]))
2318 rs.push(parts[i]);
2319 }
2320 return rs;
2321 },
2322
2323 /**
2324 * Converts all of the characters in this RiString to lower case
2325 *
2326 * @returns {object} this RiString
2327 */
2328 toLowerCase : function() {
2329
2330 return this.text(this._text.toLowerCase());
2331
2332 },
2333
2334 /**
2335 * Returns the contained string object
2336 *
2337 * @returns {string}
2338 */
2339 toString : function() {
2340
2341 return "RiString["+this._text+"]";
2342
2343 },
2344
2345 /**
2346 * Returns true if and only if this string contains the specified sequence of char values.
2347 *
2348 * @param {string} text text to be checked
2349 * @returns {boolean}
2350 */
2351 containsWord : function(text) {
2352
2353 return this.indexOf(text) > -1;
2354
2355 },
2356
2357 /**
2358 * Converts all of the characters in this RiString to upper case
2359 *
2360 * @returns {object} this RiString
2361 */
2362 toUpperCase : function() {
2363
2364 return this.text(this._text.toUpperCase());
2365
2366 },
2367
2368 /**
2369 * Returns a copy of the string, with leading and trailing whitespace omitted.
2370 *
2371 * @returns {object} this RiString
2372 */
2373 trim : function() {
2374
2375 return this.text(trim(this._text));
2376
2377 },
2378
2379 /**
2380 * Returns the character at the given 'index', or empty string if none is found
2381 *
2382 * @param {number} index index of the character
2383 * @returns {string} the character
2384 */
2385 charAt : function(index) {
2386
2387 return this._text.charAt(index);
2388
2389 },
2390
2391 /**
2392 * Concatenates the text from another RiString at the end of this one
2393 *
2394 * @returns {object} this RiString
2395 */
2396 concat : function(riString) {
2397
2398 return this._text.concat(riString.text());
2399
2400 },
2401
2402 /**
2403 * Removes the character at the specified index
2404 *
2405 * @param {number} idx the index
2406 * @returns {object} this RiString
2407 */
2408 removeCharAt : function(idx) {
2409
2410 this.text(this._text.substring(0, idx).concat(this._text.substring(idx + 1)));
2411
2412 }
2413
2414 }
2415
2416
2417 // ////////////////////////////////////////////////////////////
2418 // RiGrammar
2419 // ////////////////////////////////////////////////////////////
2420
2421 /**
2422 * @name RiGrammar
2423 * @class Implementation of a (probabilistic) context-free grammar (with specific
2424 * literary extensions) that performs generation from user-specified grammars.
2425 */
2426 /* <pre>
2427 *
2428 rg = new RiGrammar("mygrammar.g");
2429 System.out.println(rg.expand());</pre>
2430 *
2431 *
2432 * RiTa grammar files are JSON text files that follow the format below:
2433 * <pre> myGrammar = {
2434 <start>
2435 <rule1> | <rule2> | <rule3>
2436 }
2437
2438 {
2439 <rule2>
2440 terminal1 |
2441 terminal2 | <rule1>
2442 # this is a comment
2443 }
2444 ...</pre>
2445 * <b>Primary methods of interest:</b>
2446 * <ul>
2447 * <li><code>expand()</code> which simply begins at the <start> state and
2448 * generates a string of terminals from the grammar.<p>
2449 * <li><code>expandFrom(String)</code> which begins with the argument
2450 * String (which can consist of both non-terminals and terminals,)
2451 * and expands from there. Notice that <code>expand()</code> is simply
2452 * a convenient version of <code>expandFrom("<start>");</code>.<p>
2453 * <li><code>expandWith(String, String)</code> takes 2 String arguments, the 1st
2454 * (a terminal) is guaranteed to be substituted for the 2nd (a non-terminal). Once this
2455 * substitution is made, the algorithm then works backwards (up the tree from the leaf)
2456 * ensuring that the terminal (terminal1) appears in the output string.
2457 * For example, with the grammar fragment above, one might call:<p>
2458 <pre>
2459 grammar.expandWith(terminal1, "<rule2>");
2460 </pre>
2461 * assuring not only that <code><rule2></code>will be used at least
2462 * once in the generation process, but that when it is, it will be replaced
2463 * by the terminal "hello".
2464 *</ul>
2465 *
2466 *<li>A RiGrammar object will assign (by default) equal weights to all choices in a rule.
2467 *One can adjust the weights by adding 'multipliers' as follows: (in the rule below,
2468 * 'terminal1' will be chosen twice as often as the 2 other choices.
2469 * <pre> {
2470 <rule2>
2471 [2] terminal1 |
2472 terminal2 | <rule1>
2473 }</pre>
2474
2475 *<li>The RiGrammar object supports callbacks, from your grammar, back into your code.
2476 * To generate a callback, add the method call in your grammar, surrounded by back-ticks, as follows:
2477 * <pre>
2478 * {
2479 * <rule2>
2480 * The cat ran after the `getRhyme("cat");` |
2481 * The <noun> ran after the `pluralize(<noun>);`
2482 * }</pre>
2483 *
2484 * Any number of arguments may be passed in a callback, but for each call,
2485 * there must be a corresponding method in the sketch, e.g.,
2486 *
2487 * <pre>
2488 * function pluralize(String s) {
2489 * ...
2490 * }
2491 * </pre>
2492 *
2493 * @author dhowe
2494 */
2495 RiGrammar = makeClass();
2496
2497 RiGrammar.START_RULE = "<start>";
2498 RiGrammar.OPEN_RULE_CHAR = "<";
2499 RiGrammar.CLOSE_RULE_CHAR = ">";
2500 RiGrammar.PROB_PATT = /(.*[^\s])\s*\[([0-9.]+)\](.*)/;
2501 RiGrammar.OR_PATT = /\s*\|\s*/;
2502 RiGrammar.EXEC_PATT = /`[^`]+`/g;
2503 RiGrammar.STRIP_TICKS = /`([^`]+)`/g
2504
2505 /**
2506 * Set/gets the execDisabled flag. Set to true (default=false)
2507 * if you don't want to use the exec mechanism for callbacks. Useful if you want
2508 * to include backticks or method calls as terminals in your grammar.
2509 */
2510 RiGrammar._execDisabled = function(disableExec)
2511 {
2512 if (arguments.length==1) {
2513 RiGrammar._execDisabled = disableExec;
2514 }
2515 return RiGrammar._execDisabled;
2516 }
2517
2518 RiGrammar.prototype = {
2519
2520 /**
2521 * Initializes a grammar from an object or JSON string containing the rules
2522 *
2523 * @param {string | object} grammar containing the grammar rules
2524 */
2525 initialize : function(grammar) {
2526
2527 if (Type.is(grammar,O) || Type.is(grammar,O))
2528 err('Expects OBJECT or STRING');
2529
2530 this._rules = {};
2531 this._execDisabled = false;
2532 grammar && this.setGrammar(grammar);
2533 },
2534
2535 /**
2536 * Loads a JSON grammar via AJAX call to 'url', replacing any existing grammar.
2537 * @param {string} url of JSON file containing the grammar rules
2538 * @returns {object} this RiGrammar
2539 */
2540 _load : function(url) {
2541
2542 this.reset();
2543
2544 err("Implement me!");
2545
2546 return this;
2547
2548 },
2549
2550 /**
2551 * Initializes a grammar from an object or JSON string containing the rules (rather than a file)
2552 * and replacing any existing grammar.
2553 * @param {string | object} grammar containing the grammar rules
2554 * @returns {object} this RiGrammar
2555 */
2556 setGrammar : function(grammar) {
2557
2558 this.reset();
2559
2560 grammar = (typeof grammar == S) ? JSON.parse(grammar) : grammar
2561
2562 for (var rule in grammar)
2563 this.addRule(rule, grammar[rule]);
2564
2565 return this;
2566
2567 },
2568
2569 /**
2570 * Returns the current set of rules as an associative array: {names -> definitions}
2571 * @returns {object}
2572 */
2573 getRules : function() {
2574
2575 return this._rules;
2576
2577 },
2578
2579
2580 /**
2581 * Deletes the named rule from the grammar
2582 * @returns {object} this RiGrammar
2583 */
2584 removeRule : function(name) {
2585
2586 name = this._normalizeRuleName(name);
2587 delete this._rules[name];
2588 return this;
2589
2590 },
2591
2592 /**
2593 * Makes a (deep) copy of this object
2594 *
2595 * @returns {object} this RiGrammar
2596 */
2597 clone : function() { // TODO: test me well
2598
2599 var tmp = RiGrammar();
2600 for (var name in this._rules) {
2601 tmp._rules[name] = this._rules[name];
2602 }
2603 return tmp;
2604
2605 },
2606
2607
2608 /**
2609 * Adds a rule to the existing grammar, replacing any existing rule with the same name
2610 * @param {string} name
2611 * @param {string} ruleStr
2612 * @param {number} weight
2613 * @returns {object} this RiGrammar
2614 */
2615 addRule : function(name, ruleStr, weight)
2616 {
2617 var dbug = false;
2618
2619 weight = (isNull(weight) ? 1.0 : weight); // default
2620
2621 name = this._normalizeRuleName(name);
2622
2623 if (dbug) log("addRule: "+name+ " -> "+ruleStr+" ["+weight+"]");
2624
2625 var ruleset = ruleStr.split(RiGrammar.OR_PATT);
2626 //ruleset = "<noun-phrase> <verb-phrase>";
2627
2628 for ( var i = 0; i < ruleset.length; i++) {
2629
2630 var rule = ruleset[i];
2631 var prob = weight;
2632 var m = RiGrammar.PROB_PATT.exec(rule);
2633
2634 if (m != null) // found weighting
2635 {
2636 if (dbug) {
2637 log("Found weight for " + rule);
2638 for (i = 0; i < m.length; i++)
2639 log(" " + i + ") '" + m[i] + "'");
2640 }
2641 rule = m[1] + m[3];
2642 prob = m[2];
2643 if (dbug) log("weight=" + prob + " rule='" + rule + "'");
2644 }
2645
2646 if (this.hasRule(name)) {
2647 if (dbug)log("rule exists");
2648 var temp = this._rules[name];
2649 temp[rule] = prob;
2650 }
2651 else {
2652
2653 // log("new rule");
2654 var temp2 = {};
2655 temp2[rule] = prob;
2656 this._rules[name] = temp2;
2657 if (dbug)log("added rule: "+name);
2658 }
2659 }
2660 return this;
2661
2662 },
2663
2664 /**
2665 * Clears all rules in the current grammar
2666 * @returns {object} this RiGrammar
2667 */
2668 reset : function() {
2669
2670 this._rules = {};
2671 return this;
2672
2673 },
2674
2675 /**
2676 * @param {string} pre name
2677 */
2678 getRule : function(pre) {
2679
2680 pre = this._normalizeRuleName(pre);
2681
2682 // log("getRule("+pre+")");
2683 var tmp = this._rules[pre];
2684 var name, cnt = 0;
2685
2686 for (name in tmp) cnt++; // count the matching rules
2687
2688 if (cnt == 1) {
2689 //log("1returning: "+name+" / "+typeof name);
2690 return name;
2691 }
2692 else if (cnt > 1) {
2693
2694 var sr = this._getStochasticRule(tmp);
2695 //log("2returning: "+sr+" / "+typeof sr);
2696 return sr;
2697 }
2698 else {
2699 err("No rule found for: "+pre);
2700 }
2701
2702 },
2703
2704 /**
2705 * Prints the grammar rules to the console in human-readable format (useful for debugging)
2706 * @returns {object} this RiGrammar
2707 */
2708 print : function() {
2709
2710 if (console) {
2711 console.log("Grammar----------------");
2712 for ( var name in this._rules) {
2713
2714 console.log(" '" + name + "' -> ");
2715 var choices = this._rules[name];
2716 for ( var p in choices) {
2717 console.log(" '" + p + "' [" + choices[p] + "]");
2718 }
2719 }
2720 console.log("-----------------------");
2721 }
2722 return this;
2723
2724 },
2725
2726 hasRule : function(name) {
2727
2728 //log("hasRule("+name+")");
2729 name = this._normalizeRuleName(name);
2730 return (typeof this._rules[name] !== 'undefined');
2731
2732 },
2733
2734 /**
2735 * Expands a grammar from its '<start>' symbol
2736 * @returns {string}
2737 */
2738 expand : function() {
2739
2740 return this.expandFrom(RiGrammar.START_RULE);
2741
2742 },
2743
2744 /**
2745 * Expands the grammar after replacing an instance of the non-terminal
2746 * 'symbol' with the String in 'literal'.
2747 * <P>
2748 * Guarantees that 'literal' will be in the final expanded String,
2749 * assuming at least one instance of 'symbol' in the Grammar.
2750 * @param literal
2751 * @param symbol
2752 *
2753 * @returns {string} expanded text
2754 */
2755 expandWith : function(literal, symbol) { // TODO: finish
2756
2757 //error("oops, caught in-between versions");
2758
2759 var gr = this.clone();
2760
2761 var match = false;
2762 for ( var name in gr._rules) {
2763 if (name===symbol) {
2764 var obj = {};
2765 obj[literal] = 1.0;
2766 gr._rules[name] = obj;
2767 match = true;
2768 }
2769 }
2770 if (!match)
2771 err("Rule '"+symbol+"' not found in grammar");
2772
2773 // TODO: tmp, awful hack, write this correctly
2774 var tries, maxTries = 500;
2775 for (tries = 0 ;tries < maxTries; tries++) {
2776 var s = gr.expand();
2777 if (s.indexOf(literal)>-1)
2778 return s;
2779 }
2780 err("\n[WARN] RiGrammar failed to complete after "+tries+" tries\n");
2781
2782 },
2783
2784 /**
2785 * @param input
2786 * @returns this
2787 */
2788 _handleExec : function(input) { // TODO: private
2789
2790 if (!input || !input.length) return E;
2791
2792 // strip backticks and eval
2793 var exec = input.replace(RiGrammar.STRIP_TICKS, "$1");
2794
2795 try {
2796 //log("handleExec: "+exec);
2797 input = eval(exec);
2798 }
2799 catch (e) {
2800 warn("Error evaluating: "+input+" ignoring backticks\n "+e.message);
2801 }
2802 return input;
2803 },
2804
2805 /**
2806 * Expands the grammar, starting from the given symbol.
2807 * RiGrammar.expand() is equivalent to RiGrammar.expandFrom('').
2808 *
2809 * @param {string} rule
2810 * @returns {string}
2811 *
2812 */
2813 expandFrom : function(rule) {
2814
2815 if (!this.hasRule(rule)) {
2816 warn("Rule not found: " + rule + "\nRules: ");
2817 (!RiTa.SILENT) && this.print();
2818 }
2819
2820 var iterations = 0;
2821 var maxIterations = 1000;
2822 while (++iterations < maxIterations) {
2823
2824 //log("expand: '"+rule +"'");
2825 var next = this._expandRule(rule);
2826 if (!next) {
2827
2828 // we're done, check for back-ticked strings to eval?
2829
2830 (!this._execDisabled) && (rule=rule.replace(RiGrammar.EXEC_PATT, this._handleExec));
2831
2832 break;
2833 }
2834 rule = next;
2835 }
2836
2837 if (iterations >= maxIterations)
2838 warn("max number of iterations reached: " + maxIterations);
2839
2840 return rule;
2841
2842 },
2843
2844 // Privates (can we hide these?) ----------------
2845
2846 _expandRule : function(prod) { //private
2847
2848 var dbug = false;
2849 if (dbug) log("_expandRule(" + prod + ")");
2850
2851 for ( var name in this._rules) {
2852
2853 var entry = this._rules[name];
2854 if (dbug) log(" name=" + name+" entry=" + entry+" prod=" + prod+" idx=" + idx);
2855 var idx = prod.indexOf(name);
2856
2857 if (idx >= 0) {
2858
2859 var pre = prod.substring(0, idx);
2860 var expanded = this.getRule(name);
2861 var post = prod.substring(idx + name.length);
2862
2863 if (dbug) log(" pre=" + pre+" expanded=" + expanded+" post=" + post+" result=" + pre + expanded + post);
2864
2865 return (pre + expanded + post);
2866 }
2867
2868 // do the exec check here, in while loop()
2869 }
2870 // what happens if we get here? no expansions left, return?
2871 },
2872
2873 _normalizeRuleName : function(pre) {
2874
2875 if (!strOk(pre)) return pre;
2876
2877 if (!startsWith(pre, RiGrammar.OPEN_RULE_CHAR))
2878 pre = RiGrammar.OPEN_RULE_CHAR + pre;
2879
2880 if (!endsWith(pre,RiGrammar.CLOSE_RULE_CHAR))
2881 pre += RiGrammar.CLOSE_RULE_CHAR;
2882
2883 if (pre.indexOf('>>')>0) err(">>");
2884
2885 return pre;
2886
2887 },
2888
2889 // private?? (add structure test case)
2890 _getStochasticRule : function(temp) { // map
2891
2892 var dbug = false;
2893
2894 if (dbug) log("_getStochasticRule(" + temp + ")");
2895
2896 var p = Math.random();
2897 var result, total = 0;
2898 for ( var name in temp) {
2899 total += parseFloat(temp[name]);
2900 }
2901
2902 if (dbug) log("total=" + total+"p=" + p);
2903
2904 for ( var name in temp) {
2905 if (dbug) log(" name=" + name);
2906 var amt = temp[name] / total;
2907
2908 if (dbug) log("amt=" + amt);
2909
2910 if (p < amt) {
2911 result = name;
2912 if (dbug)log("hit!=" + name);
2913 break;
2914 } else {
2915 p -= amt;
2916 }
2917 }
2918 return result;
2919 }
2920
2921
2922 } // end RiGrammar
2923
2924
2925 var Easing = {
2926
2927 Linear: {
2928
2929 None: function ( k ) {
2930
2931 return k;
2932
2933 }
2934
2935 },
2936
2937 Quadratic: {
2938
2939 In: function ( k ) {
2940
2941 return k * k;
2942
2943 },
2944
2945 Out: function ( k ) {
2946
2947 return k * ( 2 - k );
2948
2949 },
2950
2951 InOut: function ( k ) {
2952
2953 if ( ( k *= 2 ) < 1 ) return 0.5 * k * k;
2954 return - 0.5 * ( --k * ( k - 2 ) - 1 );
2955
2956 }
2957
2958 },
2959
2960 Cubic: {
2961
2962 In: function ( k ) {
2963
2964 return k * k * k;
2965
2966 },
2967
2968 Out: function ( k ) {
2969
2970 return --k * k * k + 1;
2971
2972 },
2973
2974 InOut: function ( k ) {
2975
2976 if ( ( k *= 2 ) < 1 ) return 0.5 * k * k * k;
2977 return 0.5 * ( ( k -= 2 ) * k * k + 2 );
2978
2979 }
2980
2981 },
2982
2983 Quartic: {
2984
2985 In: function ( k ) {
2986
2987 return k * k * k * k;
2988
2989 },
2990
2991 Out: function ( k ) {
2992
2993 return 1 - --k * k * k * k;
2994
2995 },
2996
2997 InOut: function ( k ) {
2998
2999 if ( ( k *= 2 ) < 1) return 0.5 * k * k * k * k;
3000 return - 0.5 * ( ( k -= 2 ) * k * k * k - 2 );
3001
3002 }
3003
3004 },
3005
3006 Quintic: {
3007
3008 In: function ( k ) {
3009
3010 return k * k * k * k * k;
3011
3012 },
3013
3014 Out: function ( k ) {
3015
3016 return --k * k * k * k * k + 1;
3017
3018 },
3019
3020 InOut: function ( k ) {
3021
3022 if ( ( k *= 2 ) < 1 ) return 0.5 * k * k * k * k * k;
3023 return 0.5 * ( ( k -= 2 ) * k * k * k * k + 2 );
3024
3025 }
3026
3027 },
3028
3029 Sinusoidal: {
3030
3031 In: function ( k ) {
3032
3033 return 1 - Math.cos( k * Math.PI / 2 );
3034
3035 },
3036
3037 Out: function ( k ) {
3038
3039 return Math.sin( k * Math.PI / 2 );
3040
3041 },
3042
3043 InOut: function ( k ) {
3044
3045 return 0.5 * ( 1 - Math.cos( Math.PI * k ) );
3046
3047 }
3048
3049 },
3050
3051 Exponential: {
3052
3053 In: function ( k ) {
3054
3055 return k === 0 ? 0 : Math.pow( 1024, k - 1 );
3056
3057 },
3058
3059 Out: function ( k ) {
3060
3061 return k === 1 ? 1 : 1 - Math.pow( 2, - 10 * k );
=======
1 /*
2 * TODO:
3 *
4 * -- remove dependency for 1 function (getMetrics()) on jquery...
5 *
6 * -- add memoizing of functions: textWidth, textAscent, textDescent, getBoundingBox, etc
7 * -- fonts and bounds
8 *
9 * -- re-add requestAnimationFrame?
10 *
11 * RiTa:
12 splitSentences(): Can't use the lib from java for sentence parsing.
13 Implemented a simple regex. What's a better alternative?
14
15 RiText:
16
17 Make sure that color() takes numbers AND strings (e.g., 'black' or '#ffee23');
18 Add: rotateTo(radians, sec)
19
20 RiLexicon:
21 Need to better deal with words not found in dictionary (getStresses, getPhonemes, getSyllables)
22 Finish: Get-random-word-by-part-of-speech
23
24 Conjugator:
25 Why are irregulars not accurate? Sleep is returning "sleeped" not "slept"
26 Why is it apparently only reaching two types of rules?
27
28 Add: RiHTMLParser / Google Search / MsNgramClient
29 fetch()
30 fetchImage()
31 Google search good to go, with API key. Should take this as argument
32
33 $Id: src_rita.js.html,v 1.4 2012/06/26 16:10:18 dev Exp $
34
35 */
36 (function(window, undefined) {
37
38 /**
39 * Simple type-checking framework for arguments and return values
40 * Adapted from:
41 * http://blog.jcoglan.com/2008/01/22/bringing-static-type-checking-to-javascript
42 * @private
43 */
44 Type = {
45
46 N : 'number', S : 'string', O : 'object', A :'array', B : 'boolean', R : 'regexp', F : 'function',
47
48 /**
49 * from: http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/
50 */
51 get : function(obj) {
52
53 return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
54 },
55
56 /**
57 * Returns true if the object if of type 'type, otherwise false
58 */
59 is : function(obj,type) {
60
61 return Type.get(obj) === type;
62 },
63
64 sigMatch : function() {
65
66 var a = arguments;
67 switch (a.length) {
68
69 case 0:
70 case 1:
71 err("Too few args: " + a.length);
72 break;
73
74 case 2:
75 return (a[0] && a[1] && Type.checkSig(a[0], a[1]));
76
77 default:
78
79 var theActual = a[a.length - 1];
80
81 for ( var i = 0; i < a.length - 1; i++) {
82 if (Type.checkSig(a[i], theActual))
83 return true;
84 }
85 return false;
86 }
87 },
88
89 checkSig : function(expected, actual) {
90
91 // log( "_checkSig: expected="+expected+" actual:"+actual);
92
93 if (arguments.length == 2 && expected === 'array' && actual instanceof Array)
94 return true;
95
96 if (actual.length != expected.length)
97 return false;
98
99 var n = expected.length, valid, a, b;
100
101 for ( var i = 0; i < n; i++) {
102 a = actual[i];
103 b = expected[i];
104 valid = true;
105
106 switch (true) {
107
108 case b instanceof Function:
109 valid = a ? (a.isA ? a.isA(b) : (a instanceof b)) : false;
110 break;
111
112 case typeof b == 'string' || b instanceof String:
113
114 // allow numbers for booleans (?)
115 valid = ((typeof a == b) ||
116 (b === 'array' && a instanceof Array) ||
117 (b === 'boolean' && typeof a === 'number') ||
118 (b === 'regexp' && Type.get(a) === 'regexp'));
119
120 break;
121 }
122
123 if (!valid) return false;
124 }
125
126 return true;
127 },
128
129 throwError : function(msg) {
130
131 console.trace(this);
132 throw TypeError(msg);
133 },
134
135
136 /**
137 * Simple type-checking for argument types
138 * @private
139 */
140 expects : function() {
141
142 var method = this, expected = []; //arguments;
143
144 for ( var i = 0; i < arguments.length; i++) {
145 expected[i] = arguments[i];
146 }
147
148 if (expected.length === 0) expected = [ [] ];
149
150 // check for old-style args (not in array), e.g., expects(B,S);
151 if (expected.length > 0) {
152 for ( var i = 0; i < expected.length; i++) {
153 if (typeof expected[i] === S && expected[i] !== 'array') {
154 Type.throwError("Failed expects(): expected array, found string "
155 + "(perhaps an old-style arguments list?): \n" + method);
156 }
157 }
158 }
159
160 return function() {
161
162 var args = [], given = [];
163
164 for ( var i = 0; i < expected.length; i++)
165 args.push(expected[i]);
166
167 for ( var i = 0; i < arguments.length; i++)
168 given.push(arguments[i]);
169
170 args.push(given); // [[expected1],[expected2],...,[arguments]]
171
172 if (!Type.sigMatch.apply(this, args)) {
173 Type.throwError('Invalid arg types: expecting ' +
174 asList(expected) + ' but found: '+asList(given));
175 }
176
177 return method.apply(this, arguments);
178 };
179 },
180
181
182 /**
183 * Simple type-checking for return types
184 * @private
185 */
186 returns : function() {
187
188 if (arguments.length != 1) error
189 ('returns() expects 1 arg, found '+arguments.length);
190
191 var method = this, expected = arguments[0];
192
193 return function() {
194
195 var result = method.apply(this, arguments);
196
197 if (!Type.checkSig([expected],[result])) {
198
199 Type.throwError('Invalid return type: ' + result +
200 ' (' + (Type.get(result))+ '), expected: ' + expected+"\n");
201 }
202 return result;
203 };
204 }
205
206 } // end Type
207
208 // TODO: clean these up after
209 Function.prototype.expects = Type.expects;
210 Function.prototype.returns = Type.returns;
211
212 var is = Type.is; // aliases
213
214 // ////////////////////////////////////////////////////////////
215 // RiMarkov
216 // ////////////////////////////////////////////////////////////
217
218 /**
219 * @name RiMarkov
220 * @class Performs analysis and text generation via Markov chains (aka N-Grams)
221 * with options to process single characters, words, sentences, and
222 * arbitrary regular expressions.
223 */
224 /*
225 * <p>
226 *
227 * Provides a variety of methods specifically
228 * designed for text-generation.
229 *
230 * @example usage:<pre>
231 * RiMarkov rm = new RiMarkov(this, 3);
232 * rm.loadFile("war_peace.txt"); // in data dir.
233 * String[] sents = rm.generateSentences(10);
234 * for (int i = 0; i < sents.length; i++) {
235 * System.out.println(sents[i]);
236 * }</pre>
237
238 * Note: use RiMarkov.setTokenizerRegex() to control how inputs are tokenized (or split-up).
239 * The default is to use the Penn word-tokenizing conventions (without splitting contractions).
240 * You may wish to simply use whitespace (or some other regular expression), which
241 * can be accomplished as follows:<pre>
242 * RiMarkov rm = new RiMarkov(this, 3);
243 * rm.setTokenizerRegex("\\s");</pre>
244 *
245 *
246 * This creates a new model, with n=3, that tokenizes its
247 * input on the whitespace characters: [ \t\n\x0B\f\r].
248 *
249 * <p>
250 *
251 * Note: use RiMarkov.setAllowDuplicates(false) method to ensure that sentences that exist
252 * in the input test are not output by generate(). This method should be used with care,
253 * as certain sets of input texts (with allowDuplicates=false) may result in decreased performance
254 * and/or excessive memory use.
255 */
256 var RiMarkov = makeClass();
257
258 RiMarkov.prototype = {
259
260 /**
261 * @function
262 * @name RiMarkov
263 *
264 * Construct a Markov chain (or n-gram) model and set its n-Factor
265 *
266 * @param {number} nFactor for the model
267 * @param {boolean} caseSensitive whether the model should be case-sensitive (optional, default=false)
268 */
269 constructs : function(nFactor, caseSensitive) {
270
271 this._n = nFactor;
272 this.useSmoothing = false;
273 this.ignoreCase = !caseSensitive || true;
274 this.root = new TextNode(null, 'ROOT');
275
276 }.expects([N],[N,B]),
277
278 /**
279 * Returns either the raw (unigram) probability for a single token in the model (0 if it does not exist)
280 * OR (for an array) the probability of obtaining a sequence of k tokens where k <= nFactor,
281 * e.g., if nFactor = 3, then valid lengths for the data arrau are 1, 2 & 3.
282
283 * @param {string | array} data the string (or sequence of strings) to search for
284 *
285 * @returns {number} from 0-1
286 */
287 getProbability: function(data) {
288
289 if (!this.root) err("Model not initialized: null root!");
290
291 var tn = (typeof data==S) ?
292 this.root.lookup(data) : this._findNode(data);
293
294 return (tn) ? tn.probability() : 0;
295
296 }.expects([S],[A]).returns(N),
297
298 /**
299 * Returns the full set of possible next tokens, as an associative array,
300 * (mapping string -> number (probability)) given an array of tokens
301 * representing the path down the tree (with length less than n).
302 * <p>
303 * If the input array length is not less than n, or the path cannot be
304 * found, or the end-node has no children, null is returned.
305 * <p>
306 * @param {string | array} a single token or array of tokens (strings)
307 *
308 * @returns {object} associative array mapping tokens to probabilities
309 */
310 getProbabilities : function(path) {
311
312 if (Type.is(path,S)) path = [path];
313
314 if (path.length < 1 || path.length >= this._n)
315 return {};
316
317 var probs = {}, tn = this._findNode(path);
318
319 if (!tn) return {};
320
321 var nexts = tn.childNodes();
322 for ( var i = 0; i < nexts.length; i++) {
323 var node = nexts[i];
324 if (node) {
325 probs[node.token] = node.probability();
326 }
327 }
328
329 return probs;
330
331
332 // DEAD: CHANGED IN RiTa 6/16/12 //////////////////////////////////
333
334 /*SAVE: for ( var i = 0; i < nexts.length; i++) {
335 var node = nexts[i];
336 if (node) {
337
338 var tok = node.token;
339 var copy = path.slice();
340 copy.push(tok);
341 var prob = this.getProbability(copy);
342 probs[tok] = prob;
343 }
344 }
345 return probs; */
346
347 }.expects([A],[S]).returns(O),
348
349 /**
350 * Continues generating tokens until a token matches 'regex', assuming
351 * the length of the output array is between min and maxLength (inclusive).
352 *
353 * @param {string} or {object} regex The regex string or object to match against
354 * @param {number} minLength the minimum number of tokens to generate
355 * @param {number} maxLength the maximum number of tokens to generate
356 *
357 * @returns {array} strings
358 */
359 generateUntil : function(regex, minLength, maxLength){
360
361 minLength = minLength || 1, maxLength = maxLength || 99;
362
363 var mn, tokens, tries=0, maxTries=500;
364
365 OUT: while (++tries < maxTries) {
366
367 // generate the min number of tokens
368 tokens = this.generateTokens(minLength);
369
370 // keep adding one and checking until we pass the max
371 while (tokens.length < maxLength) {
372
373 mn = this._nextNode(tokens);
374
375 if (!mn || !mn.token)
376 continue OUT;// fail, restart
377
378 tokens.push(mn.token);
379
380 // check against our regex
381 if (mn.token.search(regex) >-1 )
382 return tokens;
383 }
384 }
385
386 // uh-oh, we failed
387 if (tries >= maxTries)
388 err("\n[WARN] RiMarkov failed to complete after "+tries+" attempts\n");
389
390 return tokens;
391
392 }.expects([S],[S,N,N]).returns(A),
393
394 /**
395 * Generates a string of <pre>length</pre> tokens from the model
396 * @param {number} the target number of tokens to generate
397 * @returns {array} strings
398 */
399 generateTokens : function(targetNumber){
400
401 var tries = 0, maxTries = 500, tokens = [];
402
403 OUT: while (++tries < maxTries) {
404
405 var mn = this.root.selectChild(null, true);
406 if (!mn || !mn.token) continue OUT;
407 tokens.push(mn);
408
409 while (tokens.length < targetNumber) {
410
411 mn = this._nextNode(tokens);
412 if (!mn || !mn.token) { // hit the end
413
414 tokens = []; // start over
415 continue OUT;
416 }
417
418 tokens.push(mn);
419 }
420
421 break;
422 }
423
424 // uh-oh, looks like we failed...
425 if (tokens.length < targetNumber) {
426 err("\n[WARN] RiMarkov failed to complete after "+tries
427 +" tries, with only "+tokens.length+" successful generations...\n");
428 }
429
430 var res = [];
431 for ( var i = 0; i < tokens.length; i++) {
432 res[i] = tokens[i].token;
433 }
434
435 return res;// this._tokensToString(tokens, true);
436
437 }.expects([N]).returns(A),
438
439
440
441 /**
442 * Sets/gets whether the model ignores case in its comparisons
443 * @param {boolean} value sets the value of the flag (optional)
444 * @returns {number}
445 */
446 ignoreCase : function(value){
447
448 if (arguments.length) {
449
450 // TODO: and do what??
451 this.ignoreCase = value;
452 return this;
453 }
454 return this.ignoreCase;
455
456 }.expects([B],[]),
457
458 /**
459 * TODO: does this make sense as one method?
460 *
461 * If only one array parameter is provided, this function returns all possible
462 * next words (or tokens), ordered by probability, for the given
463 * array. <p>Note: seed arrays of any size (>0) may
464 * be input, but only the last n-1 elements will be considered.
465 *
466 * @example var result = getCompletions([ "the","red"]);
467 *
468 * If two arrays are provided, it returns an unordered list of possible words <i>w</i>
469 * that complete an n-gram consisting of: pre[0]...pre[k], <i>w</i>, post[k+1]...post[n].
470 * As an example, the following call:
471 *
472 * @example var result = getCompletions([ "the" ], [ "red", "ball" ]);
473 *
474 * will return all the single words that occur between 'the' and 'red ball'
475 * in the current model (assuming n > 3), e.g., [ 'round', 'big', 'bouncy']).
476 * <p>
477 * Note: For this operation to be valid, (pre.length + post.length)
478 * must be strictly less than the model's nFactor, otherwise an
479 * exception will be thrown.
480 *
481 * @param {array} pre
482 * @param {array} post (optional)
483 *
484 * @returns {array} an unordered list of possible next tokens
485 *
486 * @private TODO: implement me!
487 */
488 getCompletions : function(pre, post) {
489
490 err('not yet implemented in RiTaJS');
491
492 /* if (!post) {
493 if (pre == null || pre.length >= nFactor)
494 throw new RiTaException("Invalid pre array: "+RiTa.asList(pre));
495
496 int postLen = post == null ? 0 : post.length;
497 if (pre.length + postLen > nFactor) {
498 throw new RiTaException("Sum of pre.length" +
499 " && post.length must be < N, was "+(pre.length+postLen));
500 }
501
502 TextNode tn = findNode(pre);
503 if (tn == null) return null;
504
505 List result = new ArrayList();
506 Collection nexts = tn.getChildNodes();
507 for (Iterator it = nexts.iterator(); it.hasNext();)
508 {
509 TextNode node = (TextNode) it.next();
510 String[] test = appendToken(pre, node.getToken());
511 if (test == null) continue;
512 for (int i = 0; i < postLen; i++)
513 test = appendToken(test, post[i]);
514 if (findNode(test) != null)
515 result.add(node.getToken());
516 }
517 return strArr(result);
518 }
519 else {
520 var seed = pre;
521 if (seed == null || seed.length == 0) {
522 System.out.println("[WARN] Null (or zero-length) seed passed to getCompletions()");
523 return null;
524 }
525 int firstLookupIdx = Math.max(0, seed.length-(nFactor-1));
526 TextNode node = rootLookup(seed[firstLookupIdx++]);
527 for (int i = firstLookupIdx; i < seed.length; i++) {
528 if (node == null) return null;
529 node = node.lookup(seed[i]);
530 }
531 if (node == null) return null;
532
533 Collection c = node.getChildMap().values();
534 if (c == null || c.size()<1) return null;
535 TextNode[] nodes = new TextNode[c.size()];
536 nodes = (TextNode[])c.toArray(nodes);
537 Arrays.sort(nodes);
538 String[] result = new String[nodes.length];
539 for (int i = 0; i < result.length; i++)
540 result[i] = nodes[i].getToken();
541 return result;
542 }*/
543 }.expects([A],[A,A]).returns(A),
544
545 /**
546 * Returns the current n-value for the model
547 *
548 * @returns {number}
549 */
550 getN : function() {
551
552 return this._n;
553
554 }.expects([]).returns(N),
555
556
557 /**
558 * Returns the number of tokens currently in the model
559 * @returns {number}
560 */
561 numTokens : function() {
562
563 return this.root.count;
564
565 }.expects([]).returns(N),
566
567 /**
568 * Prints a formatted version of the model to the console
569 */
570 print : function() {
571
572 console && console.log(this.root.asTree(false));
573
574 }.expects([]),
575
576 /**
577 * Loads an array of tokens (or words) into the model; each
578 * element in the array must be a single token for proper
579 * construction of the model.
580 *
581 * @param {array} tokens the strings with which to load the model
582 * @param {number} multiplier Weighting for tokens in the array (optional, default=1) <br>
583 * @returns {object} this RiMarkov
584 */
585 loadTokens : function(tokens, multiplier) {
586
587 multiplier = multiplier || 1;
588
589 this.root.count += tokens.length; // here?
590
591 for (var toAdd, k = 0; k < tokens.length; k++)
592 {
593 toAdd = [];
594
595 for (var j = 0; j < this._n; j++)
596 {
597 if ((k+j) < tokens.length)
598 toAdd[j] = (!isNull(tokens[k+j])) ? tokens[k+j] : null;
599 else
600 toAdd[j] = null;
601 }
602
603 // hack to deal with multiplier...
604 for (var j = 0; j < multiplier; j++) {
605 var node = this.root;
606 for (var i = 0; i < toAdd.length; i++) {
607 if (node.token)
608 node = node.addChild(toAdd[i]);
609 }
610 }
611 }
612
613 return this;
614
615 }.expects([A],[A,N]).returns(O),
616
617
618 /** @private */
619 _findNode : function(path)
620 {
621 // log("RiMarkov.findNode("+path.toString()+")");
622 if (!path || !Type.is(path,A) || !path.length)
623 return null;
624
625 var nFactor = this._n;
626 var numNodes = Math.min(path.length, nFactor-1);
627 var firstLookupIdx = Math.max(0, path.length-(nFactor-1));
628 var node = this.root.lookup(path[firstLookupIdx++]);
629
630 if (!node) return null;
631
632 var idx = 0; // found at least one good node
633 var nodes = [];
634 nodes[idx++] = node;
635 for (var i = firstLookupIdx; i < path.length; i++) {
636 node = node.lookup(path[i]);
637 if (!node) return null;
638 nodes[idx++] = node;
639 }
640
641 return nodes ? nodes[nodes.length-1] : null;
642 },
643
644 _nextNode : function(previousTokens)
645 {
646 // Follow the seed path down the tree
647 var firstLookupIdx = Math.max(0, previousTokens.length-(this._n-1)),
648 node = this.root.lookup(previousTokens[firstLookupIdx++]);
649
650 for (var i = firstLookupIdx; i < previousTokens.length; i++) {
651 (node) && (node = node.lookup(previousTokens[i]));
652 }
653
654 // Now select the next node
655 return node.selectChild(null, true);
656 },
657
658 _tokensToString : function(tokens, addSpaces) { // not used at moment
659 var result = E;
660 for ( var i = 0; i < tokens.length; i++) {
661 if (tokens[i].token) {
662 result += tokens[i].token;
663 if (i < tokens.length-1 && addSpaces)
664 result += SP;
665 }
666 }
667 return result;
668 }
669
670 };
671
672 ///////////////////////////////////////////////////////////////////////////
673 // RiTaEvent class
674 ///////////////////////////////////////////////////////////////////////////
675
676 /**
677 * @name RiTaEvent
678 *
679 * @class Simple wrapper for event-based callbacks
680 */
681 /*
682 * @example A typical usage might be to switch on the type
683 * of a RiTaEvent within a callback:
684 <pre>
685 function onRiTaEvent(e)
686 {
687 if (e.getSource() == RiTa.BEHAVIOR_COMPLETED)
688 // ...
689 else
690 // ...
691 }
692 <pre>
693 */
694 RiTaEvent = makeClass();
695
696 RiTaEvent._callbacksDisabled = false;
697
698 RiTaEvent.prototype = {
699
700 /**
701 * Contructs a new RiTaEvent object with a source and type
702 */
703 constructs : function(sourceRiText, eventType) {
704
705 if (!sourceRiText) err('source required');
706
707 var fn = RiTaEvent.prototype.constructs;
708 if (!fn.ID) fn.ID = 0;
709 this._id = ++(fn.ID);
710
711 this._source = sourceRiText;
712 this._type = eventType || RiText.UNKNOWN;
713 //this._data = data;
714
715 }.expects([O],[O,S]),
716
717
718 /** @private */
719 toString : function() {
720
721 return "RiTaEvent[#"+this._id+" type="+this._type+
722 " src="+this._source.toString()+"]";//+", data="+this._data+"]";
723
724 }.expects([]),
725
726 /**
727 * Gets the source for this event
728 * @returns {object} the source
729 */
730 getSource : function() {
731
732 return this._source;
733
734 }.expects([]),
735
736 /**
737 * Gets the type for this event
738 * @returns {string} the type
739 */
740 getType : function() {
741
742 return this._type;
743
744 }.expects([]),
745
746 /**
747 * Fires an event and directs it to the appropriate callback implementation
748 * @param callback
749 * @private
750 */
751 fire : function(callback) {
752
753 callback = callback || window.onRiTaEvent || RiText.graphics().onRiTaEvent; // last is for P5
754
755 if (typeof callback === 'function') {
756
757 try {
758 callback.apply(this,[this]);
759 }
760 catch(err) {
761
762 RiTaEvent._callbacksDisabled = true;
763 console.warn("RiTaEvent: error calling 'onRiTaEvent' "+err);
764 throw err;
765 }
766 }
767 else if (!RiTaEvent._callbacksDisabled) {
768
769 console.warn("RiTaEvent: no 'onRiTaEvent' callback found");
770 RiTaEvent._callbacksDisabled = true;
771 }
772
773 }.expects([],[O])
774 }
775
776
777 // ////////////////////////////////////////////////////////////
778 // RiLexicon
779 // ////////////////////////////////////////////////////////////
780
781 /**
782 * @name RiLexicon
783 *
784 * @class Represents the core 'dictionary' (or lexicon) for the RiTa tools.
785 * It contains ~35,000 words augmented with phonemic and syllabic data, as well as a list of valid parts-of-speech for each.
786 * The lexicon can be extended and/or customized for additional words, usages, or pronunciations.
787 *
788 * <p> Additionally the lexicon is equipped with implementations of a variety of matching algorithms
789 * (min-edit-distance, soundex, metaphone, anagrams, alliteration, rhymes, looks-like, etc.)
790 * based on combinations of letters, syllables and phonemes.
791 * <p>
792 * Note: For performance, the data for RiLexicon is shared in a single location for ALL created instances (static)
793 * <p>
794 * Note: If you wish to modify or customize the lexicon (e.g., add words, or change pronunciations)
795 * you can do so directly, by editing the 'rita_dict.js' file, or programatically, via addWord() and removeWord()
796 *
797 * @example
798 lex = new RiLexicon(this);
799 similars = lex.similarBySound("cat");
800 rhymes = lex.getSimpleRhymes("cat");
801 // etc.
802 */
803 RiLexicon = makeClass();
804
805 // ////////////////////////////////////////////////////////////
806 // Static functions
807 // ////////////////////////////////////////////////////////////
808
809 /** Clears the whole lexicon */
810 RiLexicon.clear = function() {
811
812 RiLexicon.data = undefined;
813 }
814
815 /**
816 * Returns the singleton instance of RiLexicon
817 * Do we need this?
818 */
819 RiLexicon._getInstance = function() {
820
821 var lexicon;
822
823 try {
824 lexicon = new RiLexicon();
825 }
826 catch(e) {
827 err("No RiTa lexicon found! Have you included 'rita_dict.js'?");
828 }
829
830 RiLexicon._getInstance = function() {
831 return lexicon;
832 };
833
834 return lexicon;
835 }
836
837 // ////////////////////////////////////////////////////////////
838 // Static variables
839 // ////////////////////////////////////////////////////////////
840
841 // TODO: these need comments
842
843 RiLexicon.FEATURE_DELIM = ':';
844
845 RiLexicon.STRESSED = '1';
846
847 RiLexicon.UNSTRESSED = '0';
848
849 RiLexicon.PHONEME_BOUNDARY = '-';
850
851 RiLexicon.WORD_BOUNDARY = " ";
852
853 RiLexicon.SYLLABLE_BOUNDARY = "/";
854
855 RiLexicon.SENTENCE_BOUNDARY = "|";
856
857 RiLexicon.VOWELS = "aeiou";
858
859 /** @private */
860 RiLexicon.data = undefined; // shared static var
861
862 // ////////////////////////////////////////////////////////////
863 // Member functions
864 // ////////////////////////////////////////////////////////////
865
866 RiLexicon.prototype = {
867
868 /**
869 * Constructs an instance of the RiLexicon class.
870 * <p>
871 * Note: For performance, the data for all RiLexicon instances
872 * is shared (there is only 1 copy)
873 */
874 constructs : function() {
875
876 if (!RiLexicon.data) {
877
878 //log(typeof RiTa_DICTIONARY);
879 if (typeof RiTa_DICTIONARY != 'undefined')
880 {
881 //if (!RiTa.SILENT && console) console.log('[RiTa] Loaded lexicon data...');
882
883 RiLexicon.data = RiTa_DICTIONARY;
884 }
885 else {
886
887 err("Dictionary not found! Make sure to add it to your .html:"
888 + ", e.g.,\n\n <script src=\"path/to/rita_dict.js\"></script>");
889 }
890 }
891
892 }.expects(),
893
894 /**
895 * Adds a word to the current lexicon (not permanent)
896 *
897 * @example lexicon.addWord('abandon','ax-b ae1-n-d ax-n','vb nn vbp');
898 *
899 * @param {string} word
900 * @param {string} pronunciationData
901 * @param {string} posData
902 *
903 * @returns {object} this RiLexicon
904 */
905 addWord : function(word, pronunciationData, posData) {
906
907 RiLexicon.data[word.toLowerCase()] = [pronunciationData,posData];
908 return this;
909
910 }.expects([S,S,S]).returns(O),
911
912 /**
913 * Removes a word from the current lexicon (not permanent)
914 *
915 * @example removeWord('abandon');
916 *
917 * @param {string} word
918 * @returns {object} this RiLexicon
919 */
920 removeWord : function(word) {
921
922 delete RiLexicon.data[word];
923 return this;
924
925 }.expects([S]).returns(O),
926
927
928 /**
929 * Compares the characters of the input string (using a version of the min-edit distance algorithm)
930 * to each word in the lexicon, returning the set of closest matches.
931 *
932 * @param {string} word
933 * @param {number} minAllowedDist minimum edit distance for matches (optional, default=1)
934 * @param {boolean} preserveLength whether to return only words that match the length of the input word (optional, default=true)
935 *
936 * @returns {array} matching words
937 */
938 similarByLetter : function(input, minAllowedDist, preserveLength) {
939
940 var minVal = Number.MAX_VALUE, minLen = 2, result = [];
941
942 if (!(input && input.length)) return [];
943
944 input = input.toLowerCase();
945 minAllowedDist = minAllowedDist || 1;
946 preserveLength = preserveLength || false;
947
948 for (var entry in RiLexicon.data) {
949
950 if (preserveLength && entry.length != input.length || entry.length < minLen)
951 continue;
952
953 entry = entry.toLowerCase();
954
955 if (entry==input || entry==(input+"s")|| entry==(input+"es"))
956 continue;
957
958 var med = MinEditDist.computeRaw(entry, input);
959
960 if (med == 0) continue; // same word
961
962 // we found something even closer
963 if (med >= minAllowedDist && med < minVal) {
964
965 minVal = med;
966 result = [entry];
967 }
968
969 // we have another best to add
970 else if (med == minVal) {
971 result.push(entry);
972 }
973 }
974
975 return result;
976
977 }.expects([S],[S,N],[S,N,B]).returns(A),
978
979 /**
980 * Compares the phonemes of the input string
981 * (using a version of the min-edit distance algorithm)
982 * to each word in the lexicon, returning the set of closest matches.
983 *
984 * @param {string} input
985 * @param {number} minEditDist (optional) minimum edit distance for matches
986 * @returns {array} matching words
987 */
988 similarBySound: function(input, minEditDist) { // take options arg instead?
989
990 var minVal = Number.MAX_VALUE, entry, result = [], minLen = 2;
991
992 minEditDist = minEditDist || 1;
993
994 var targetPhonesArr = this.getPhonemes(input.toLowerCase()).split("-");
995
996 if (targetPhonesArr[0] == null || !(input && input.length)) return [];
997
998 for (entry in RiLexicon.data) {
999
1000 if (entry.length < minLen) continue;
1001
1002 entry = entry.toLowerCase();
1003
1004 if (entry==input || entry==(input+"s")|| entry==(input+"es"))
1005 continue;
1006
1007 // NOTE: we don't want to call getPhonemes() here -- too slow //////
1008 //phonesArr = this.getPhonemes(entry).split("-");
1009
1010 var phones = this.getRawPhones(entry); // use raw instead
1011
1012 if (!phones.length) err("Failed lookup (need LTSEngine): "+entry);
1013
1014 var phonesArr = phones.replace(/1/g, "").replace(/ /g, "-").split('-');
1015
1016 // /////////////////////////////////////////////////////////////////
1017
1018 var med = MinEditDist.computeRaw(phonesArr, targetPhonesArr);
1019
1020 if (med == 0) continue; // same phones
1021
1022 // we found something even closer
1023 if (med >= minEditDist && med < minVal) {
1024
1025 minVal = med;
1026 result = [entry];
1027 }
1028 // we have another best to add
1029 else if (med == minVal) {
1030 result.push(entry);
1031 }
1032 }
1033
1034 return result;
1035
1036 }.expects([S],[S,N]).returns(A),
1037
1038 /**
1039 * Returns all valid substrings of the input word in the lexicon
1040 *
1041 * @param {string} word
1042 * @param {number} minLength (optional, default=4) minimum length of return word
1043 * @returns {array} matching words
1044 */
1045 substrings: function(word, minLength) {
1046
1047 minLength = minLength || (minLength === 0) || 4;
1048
1049 var entry, result =[];
1050 for (entry in RiLexicon.data){
1051 if(entry == word || entry.length < minLength ) continue;
1052 if (word.indexOf(entry) >=0) result.push(entry);
1053 }
1054 return result;
1055
1056 }.expects([S],[S,N]).returns(A),
1057
1058 /**
1059 * Returns all valid superstrings of the input word in the lexicon
1060 *
1061 * @param {string} word
1062 * @returns {array} matching words
1063 */
1064 superstrings: function(word) {
1065
1066 var entry, result =[];
1067 for (entry in RiLexicon.data){
1068 if(entry == word) continue;
1069 if (entry.indexOf(word) >= 0) result.push(entry);
1070 }
1071 return result;
1072
1073 }.expects([S]).returns(A),
1074
1075 /**
1076 * First calls similarBySound(), then filters the result set by the algorithm
1077 * used in similarByLetter(); (useful when similarBySound() returns too large a result set)
1078 * @param {string} word
1079 * @param {number} minEditDist (optional) minimum edit distance for both matches
1080 * @returns {array} matching words
1081 */
1082 similarBySoundAndLetter: function(word, minEditDist) { // take options arg instead?
1083
1084 var result =[];
1085
1086 if (isNull(minEditDist)){
1087 var simSound = this.similarBySound(word);
1088 var simLetter = this.similarByLetter(word);
1089 } else {
1090 var simSound = this.similarBySound(word,minEditDist);
1091 var simLetter = this.similarByLetter(word,minEditDist);
1092 }
1093
1094 if (isNull(simSound) || isNull(simLetter)) return result;
1095
1096 for(var i=0; i<simSound.length; i++){
1097 for(var j=0; j<simLetter.length; j++){
1098 if(simSound[i] == simLetter[j]) result.push(simLetter[j]);
1099 }
1100 }
1101 return result;
1102
1103 }.expects([S],[S,N]).returns(A),
1104
1105 /**
1106 * Returns the array of all words in the lexicon or those matching a specific regex. If specified,
1107 * the order of the result array is randomized before return.
1108 *
1109 * @param {regex} regex (string or object) pattern to match (optional)
1110 * @param {boolean} randomize randomizes the order (default=false)
1111 * @returns {array} words in the RiLexicon
1112 */
1113 getWords : function() {
1114
1115 var a = arguments, randomize = false, regex = undefined,
1116 wordArr = [], words = Object.keys(RiLexicon.data);
1117
1118 switch (a.length) {
1119
1120 case 2:
1121
1122 if (Type.is(a[0],B)) {
1123 randomize = a[0];
1124 regex = (Type.is(a[1],R)) ? a[1] : new RegExp(a[1]);
1125 }
1126 else {
1127 randomize = a[1];
1128 regex = (Type.is(a[0],R)) ? a[0] : new RegExp(a[0]);
1129 };
1130
1131 break;
1132
1133 case 1:
1134
1135 if (Type.is(a[0],B)) {
1136 return a[0] ? shuffle(words) : Object.keys(words);
1137 }
1138
1139 regex = (Type.is(a[0],R)) ? a[0] : new RegExp(a[0]);
1140
1141 break;
1142
1143 case 0:
1144
1145 return shuffle(words);
1146 }
1147
1148
1149 for (var i = 0; i < words.length; i++) {
1150
1151 if (words[i].match(regex)) {
1152
1153 wordArr.push(words[i]);
1154 }
1155 }
1156
1157 return randomize ? shuffle(wordArr) : wordArr;
1158
1159 }.expects([],[S],[B],[S,B],[B,S],[R],[R,B],[B,R]).returns(A),
1160
1161 /**
1162 * Returns true if c is a vowel
1163 * @private
1164 * @param {char} p
1165 * @returns {boolean}
1166 */
1167 isVowel : function(p) {
1168
1169 return (strOk(p) && RiLexicon.VOWELS.indexOf(p) > -1);
1170
1171 }.expects([S]).returns(B),
1172
1173 /**
1174 * Returns true if c is a consonant
1175 * @private
1176 * @param {char} p
1177 * @returns {boolean}
1178 */
1179 isConsonant : function(p) {
1180
1181 return (typeof p == S && p.length==1 &&
1182 RiLexicon.VOWELS.indexOf(p) < 0 && /^[a-z\u00C0-\u00ff]+$/.test(p));
1183
1184 }.expects([S]).returns(B),
1185
1186 /**
1187 * Returns true if the word exists in the lexicon
1188 * @param {string} word
1189 * @returns {boolean}
1190 */
1191 containsWord : function(word) {
1192
1193 return (strOk(word) && !isNull(RiLexicon.data[word.toLowerCase()]));
1194
1195 }.expects([S]).returns(B),
1196
1197 /**
1198 * Returns true if the two words rhyme, that is, if their final stressed phoneme
1199 * and all following phonemes are identical, else false.
1200 * <p>
1201 * Note: returns false if word1.equals(word2) or if either (or both) are null;
1202 * <p>
1203 * Note: at present doesn't use letter-to-sound engine if either word is not found in the lexicon,
1204 * but instead just returns false.
1205 *
1206 * @param {string} word1
1207 * @param {string} word2
1208 *
1209 * @returns {boolean} true if the two words rhyme, else false.
1210 */
1211 isRhyme : function(word1, word2) {
1212
1213 if ( !strOk(word1) || !strOk(word2) || equalsIgnoreCase(word1, word2))
1214 return false;
1215
1216 var p1 = this.lastStressedPhoneToEnd(word1),
1217 p2 = this.lastStressedPhoneToEnd(word2);
1218
1219 return (strOk(p1) && strOk(p2) && p1 === p2);
1220
1221 }.expects([S,S]).returns(B),
1222
1223 /**
1224 *
1225 * Two words rhyme if their final stressed vowel and all following phonemes are identical.
1226 * @param {string} word
1227 * @returns {array} strings of the rhymes for a given word, or empty array if none are found
1228 */
1229 getRhymes : function(word) {
1230
1231 //this._buildWordlist_();
1232
1233 if (this.containsWord(word)) {
1234
1235 var p = this.lastStressedPhoneToEnd(word);
1236 var entry, entryPhones, results = [];
1237
1238 for (entry in RiLexicon.data) {
1239 if (entry === word)
1240 continue;
1241 entryPhones = this.getRawPhones(entry);
1242
1243 if (strOk(entryPhones) && endsWith(entryPhones, p)) {
1244 results.push(entry);
1245 }
1246 }
1247 return (results.length > 0) ? results : []; // return null?
1248 }
1249
1250 return []; // return null?
1251
1252 }.expects([S]).returns(A),
1253
1254 /**
1255 * Finds alliterations by comparing the phonemes of the input string to those of each word in the lexicon
1256 *
1257 * @param {string} word input
1258 * @returns {array} strings of alliterations
1259 */
1260 getAlliterations : function(word) {
1261
1262 if (this.containsWord(word)) {
1263
1264 var c2, entry, results = [];
1265 var c1 = this.firstConsonant(this.firstStressedSyllable(word));
1266
1267 for (entry in RiLexicon.data) {
1268
1269 c2 = this.firstConsonant(this.firstStressedSyllable(entry));
1270
1271 if (c2 && c1 === c2) {
1272 results.push(entry);
1273 }
1274 }
1275 return (results.length > 0) ? results : []; // return null?
1276 }
1277 return []; // return null?
1278
1279 }.expects([S]).returns(A),
1280
1281 /**
1282 * Returns true if the first stressed consonant of the two words match, else false.
1283 *
1284 * @param {string} word1
1285 * @param {string} word2
1286 * @returns {boolean} true if word1.equals(word2) and false if either (or both) are null;
1287 */
1288 isAlliteration : function(word1, word2) {
1289
1290 if (!strOk(word1) || !strOk(word2)) return false;
1291
1292 if (equalsIgnoreCase(word1, word2)) return true;
1293
1294 var c1 = this.firstConsonant(this.firstStressedSyllable(word1)),
1295 c2 = this.firstConsonant(this.firstStressedSyllable(word2));
1296
1297 //log("'"+c1+"'=?'"+c2+"'");
1298
1299 return (strOk(c1) && strOk(c2) && c1 === c2);
1300
1301 }.expects([S,S]).returns(B),
1302
1303 /**
1304 * Returns the first stressed syllable of the input word
1305 * @private
1306 * @param {string} word
1307 * @returns {string}
1308 */
1309 firstStressedSyllable : function(word) {
1310
1311 var raw = this.getRawPhones(word), idx = -1, c, firstToEnd;
1312
1313 if (!strOk(raw)) return E; // return null?
1314
1315 idx = raw.indexOf(RiLexicon.STRESSED);
1316
1317 if (idx < 0) return E; // no stresses... return null?
1318
1319 c = raw.charAt(--idx);
1320
1321 while (c != ' ') {
1322 if (--idx < 0) {
1323 // single-stressed syllable
1324 idx = 0;
1325 break;
1326 }
1327 c = raw.charAt(idx);
1328 }
1329
1330 firstToEnd = idx === 0 ? raw : trim(raw.substring(idx));
1331 idx = firstToEnd.indexOf(' ');
1332
1333 return idx < 0 ? firstToEnd : firstToEnd.substring(0, idx);
1334
1335 }.expects([S]).returns(S),
1336
1337 /**
1338 * Returns true for 'word' if it has a verb form. That is, if any of its possible parts of speech
1339 * are any variant of a verb in the PENN part-of-speech tag set (e.g. vb, vbg, vbd, vbp, vbz));
1340 * @param {string} word the PENN part-of-speech tag
1341 * @returns {boolean} true if the word can be used as a verb
1342 */
1343 isVerb: function(word) {
1344
1345 ///if (word && word.indexOf(" ") != -1) err("Only accepts a single word"); // TODO: add test
1346
1347 var pos = RiTa.getPosTags(word);
1348 //console.log(word+":"+pos)
1349 return PosTagger.isVerb(pos.toString());
1350
1351 }.expects([S]).returns(B),
1352
1353 /**
1354 * Returns true for 'word' if it has a noun form. That is, if any of its possible parts of speech
1355 * are any variant of a noun in the PENN part-of-speech tag set(e.g. nn, nns, nnp, nnps)
1356 * @param {string} word the PENN part-of-speech tag
1357 * @returns {boolean} true if the word can be used as a noun
1358 */
1359 isNoun : function(word) {
1360
1361 if (word && word.indexOf(" ") != -1) err("Only accepts a single word"); // TODO: add test
1362
1363 //return RiTa.tagForWordNet(word) === 'n' ;
1364
1365 var pos = RiTa.getPosTags(word);
1366 return PosTagger.isNoun(pos.toString());
1367
1368 }.expects([S]).returns(B),
1369
1370 /**
1371 * Returns true for 'word' if it has an adverb form. That is, if any of its possible parts of speech
1372 * are any variant of an adverb in the PENN part-of-speech tag set (e.g. rb, rbr, rbs)
1373 * @param {string} word the PENN part-of-speech tag
1374 * @returns boolean} true if the word can be used as an adverb
1375 */
1376 isAdverb : function(word) {
1377
1378 if (word && word.indexOf(" ") != -1) err("Only accepts a single word"); // TODO: add test
1379
1380 //return RiTa.tagForWordNet(word) === 'r' ;
1381
1382 var pos = RiTa.getPosTags(word);
1383 return PosTagger.isAdverb(pos.toString());
1384
1385 }.expects([S]).returns(B),
1386
1387 /**
1388 * Returns true for 'word' if it has an adjective form. That is, if any of its possible parts of speech
1389 * are any variant of an adjective in the PENN part-of-speech tag set (e.g. jj, jjr, jjs)
1390 * @param {string} word the PENN part-of-speech tag
1391 * @returns {boolean} true if the word can be used as an adjective
1392 */
1393 isAdjective : function(word) {
1394
1395 if (word && word.indexOf(" ") != -1) err("Only accepts a single word"); // TODO: add test
1396
1397 //return RiTa.tagForWordNet(word) === 'a' ;
1398
1399 var pos = RiTa.getPosTags(word);
1400 return PosTagger.isAdj(pos.toString());
1401
1402 }.expects([S]).returns(B),
1403
1404
1405 /**
1406 * Returns a String containing the phonemes for each syllable of each word of the input text,
1407 * delimited by dashes (phonemes) and semi-colons (words). For example, the 4 syllables of the phrase
1408 * 'The dog ran fast' is "dh-ax:d-ao-g:r-ae-n:f-ae-s-t".
1409 * @private
1410 * @param {string} word
1411 * @returns {string} the phonemes for each syllable of each word, or null if no text has been input.
1412 */
1413 getSyllables : function(word) {
1414
1415 if (!Type.is(word,S)) err('Bad type');
1416
1417
1418 if (!word.length) return E;
1419
1420 var wordArr = RiTa.tokenize((word)), phones, raw = [];
1421
1422 for (var i=0; i< wordArr.length; i++) {
1423
1424 raw[i] = this.getRawPhones(wordArr[i]).replace(/ /g, "/");
1425 }
1426
1427 return RiTa.joinWords(raw).replace(/1/g, "").trim();
1428
1429 }.expects([S]).returns(S),
1430
1431 /**
1432 * Returns a String containing all phonemes for the input text, delimited by semi-colons,
1433 * or null if not found
1434 *
1435 * @example "dh:ax:d:ao:g:r:ae:n:f:ae:s:t"
1436 *
1437 * @param {string} word
1438 *
1439 * @returns {string} all phonemes, or null if no text has been input.
1440 *
1441 * @private
1442 *
1443 */
1444 getPhonemes : function(word) {
1445
1446 if (!word.length) return E;
1447
1448 var wordArr = RiTa.tokenize((word)), raw = [];
1449
1450 for (var i=0; i< wordArr.length; i++)
1451 {
1452
1453 if (RiTa.isPunctuation(wordArr[i])) continue;
1454
1455 // raw[i] = wordArr[i].length
1456 raw[i] = this.getRawPhones(wordArr[i]);
1457
1458 if (!raw[i].length) return null;
1459 //err("Unable to lookup (need LTSEngine): "+wordArr[i]);
1460
1461 raw[i] = raw[i].replace(/ /g, "-");
1462 }
1463
1464 return RiTa.joinWords(raw).replace(/1/g, "").trim();
1465
1466 }.expects([S]).returns(S),
1467
1468 /**
1469 * Returns a String containing the stresses for each syllable of the input text, delimited by semi-colons,
1470 * @examlpe "0:1:0:1", with 1's meaning 'stressed', and 0's meaning 'unstressed',
1471 * @private
1472 * @param {string} word
1473 * @returns {string} stresses for each syllable, or null if no text has been input.
1474 */
1475 getStresses : function(words) {
1476
1477 var stresses = [], phones, raw = [],
1478 wordArr = Type.is(words,A) ? words : RiTa.tokenize(words);
1479
1480 if (!words.length) return stresses;
1481
1482 for (var i=0; i< wordArr.length; i++) {
1483
1484 if (!RiTa.isPunctuation(wordArr[i]))
1485 raw[i] = this.getRawPhones(wordArr[i]);
1486 }
1487
1488 for (var i = 0; i < raw.length; i++) {
1489
1490 if (raw[i]) { // ignore undefined array items (eg Punctuation)
1491
1492 phones = raw[i].split(SP);
1493 for (var j = 0; j < phones.length; j++) {
1494
1495 var isStress = (phones[j].indexOf(RiLexicon.STRESSED) > -1)
1496 ? RiLexicon.STRESSED : RiLexicon.UNSTRESSED;
1497
1498 if (j > 0) isStress = "/" + isStress;
1499
1500 stresses.push(isStress);
1501 }
1502 }
1503 }
1504
1505 return stresses.join(" ").replace(/ \//g, "/");
1506
1507 }.expects([S],[A]).returns(S),
1508
1509 /**
1510 * Returns the raw dictionary data used to create the default lexicon
1511 * @returns {object} dictionary mapping words to their pronunciation/pos data
1512 */
1513 getLexicalData : function() {
1514
1515 return RiLexicon.data;
1516
1517 }.expects().returns(O),
1518
1519 /**
1520 * Allows one to set the raw dictionary data used to create the default lexicon.
1521 * See RiLexicon.addWord() for data format
1522 *
1523 * @param {object} dictionaryDataObject mapping words to their pronunciation/pos data
1524 * @returns {object} this RiLexicon
1525 */
1526 setLexicalData : function(dictionaryDataObject) {
1527
1528 RiLexicon.data = dictionaryDataObject;
1529
1530 return RiLexicon.data;
1531
1532 }.expects([O]).returns(O),
1533
1534 /**
1535 * Returns the raw dictionary entry for the given word (isn't necessary in typical usage)
1536 *
1537 * @param {string} word
1538 *
1539 * @returns {array} a 2-element array of strings,
1540 * the first is the stress and syllable data,
1541 * the 2nd is the pos data
1542 * or null if not found
1543 */
1544 lookupRaw : function(word) { // PRIVATE?
1545
1546 //if (typeof word != S) return null;
1547
1548 word = word.toLowerCase();
1549
1550 if (RiLexicon.data[word]) return RiLexicon.data[word];
1551
1552 console.warn("[RiTa] No lexicon entry for '" + word + "'");
1553
1554 return null; // if private, should return 'undefined' or null?
1555
1556 }.expects([S]).returns(A),
1557
1558
1559 /**
1560 * @private
1561 */
1562 getRawPhones : function(word) {
1563
1564 var data = this.lookupRaw(word);
1565 return (data && data.length==2) ? data[0] : E; // TODO: verify
1566
1567 }.expects([S]).returns(S),
1568
1569 /**
1570 * @private
1571 */
1572 getPosData : function(word) {
1573
1574 var data = this.lookupRaw(word);
1575 return (data && data.length==2) ? data[1] : E; // TODO: verify
1576
1577 }.expects([S]).returns(S),
1578
1579 /**
1580 * @private
1581 */
1582 getPosArr : function(word) { // SHOULD BE PRIVATE
1583
1584 var pl = this.getPosData(word);
1585
1586 if (!strOk(pl)) return []; // TODO: verify
1587
1588 return pl.split(SP);
1589
1590 }.expects([S]).returns(A),
1591
1592 /**
1593 * @private
1594 */
1595 firstConsonant : function(rawPhones) {
1596
1597 if (!strOk(rawPhones)) return E; // return null?
1598
1599 var phones = rawPhones.split(RiLexicon.PHONEME_BOUNDARY);
1600 // var phones = rawPhones.split(PHONEME_BOUNDARY);
1601
1602 if (!isNull(phones)) {
1603
1604 for (var j = 0; j < phones.length; j++) {
1605 if (this.isConsonant(phones[j].charAt(0))) // first letter only
1606 return phones[j];
1607 }
1608 }
1609 return E; // return null?
1610
1611 }.expects([S]).returns(S),
1612
1613 /**
1614 * @private
1615 */
1616 lastStressedPhoneToEnd : function(word) {
1617
1618 if (!strOk(word)) return E; // return null?
1619
1620 var idx, c, result;
1621 var raw = this.getRawPhones(word);
1622
1623 if (!strOk(raw)) return E; // return null?
1624
1625 idx = raw.lastIndexOf(RiLexicon.STRESSED);
1626
1627 if (idx < 0) return E; // return null?
1628
1629 c = raw.charAt(--idx);
1630 while (c != '-' && c != ' ') {
1631 if (--idx < 0) {
1632 return raw; // single-stressed syllable
1633 }
1634 c = raw.charAt(idx);
1635 }
1636 result = raw.substring(idx + 1);
1637
1638 return result;
1639
1640 }.expects([S]).returns(S),
1641
1642 // TODO: Re-implement
1643 /**
1644 * Returns a random word from the lexicon
1645 *
1646 * @param {string} pos (optional)
1647 * @param {string} syllableCount (optional)
1648 * @returns {string} random word
1649 */
1650 getRandomWord : function(pos, syllableCount) { // should take pos, syllableCount, neither, or both
1651
1652 var found = false, a = arguments, wordArr = Object.keys(RiLexicon.data),
1653 ran = Math.floor(Math.random() * Object.keys(RiLexicon.data).length),
1654 ranWordArr = shuffle(wordArr);
1655
1656 switch (a.length) {
1657
1658 case 2: //a[0]=pos a[1]=syllableCount
1659
1660 a[0] = trim(a[0].toUpperCase());
1661
1662 for(var j = 0; j < PosTagger.TAGS.length; j++) {
1663
1664 if (PosTagger.TAGS[j] == a[0]) found = true;
1665 }
1666
1667 if (found) {
1668
1669 for(var i=0; i< ranWordArr.length; i++){
1670
1671 var data = this.lookupRaw(ranWordArr[i]);
1672 var posTag = RiTa.getPosTags(ranWordArr[i]);
1673
1674 if (data[0].split(" ").length == a[1] && a[0] == posTag[0].toUpperCase()) {
1675 return ranWordArr[i];
1676 }
1677 }
1678 }
1679
1680 return E;
1681
1682 break;
1683
1684 case 1:
1685
1686 if (Type.is(a[0],S)) { //pos
1687
1688 a[0] = trim(a[0].toUpperCase());
1689
1690 for(var j = 0; j < PosTagger.TAGS.length; j++) {
1691
1692 if (PosTagger.TAGS[j] == a[0]) found = true;
1693 }
1694
1695 if (found) {
1696
1697 for(var i=0; i< ranWordArr.length; i++){
1698
1699 var posTag = RiTa.getPosTags(ranWordArr[i]);
1700
1701 if (a[0] == posTag[0].toUpperCase()) {
1702 return ranWordArr[i];
1703 }
1704 }
1705 }
1706 }
1707
1708 else { //syllableCount
1709
1710 for(var i=0; i< ranWordArr.length; i++) {
1711
1712 var data = this.lookupRaw(ranWordArr[i]);
1713
1714 if (data[0].split(" ").length == a[0]) {
1715
1716 return ranWordArr[i];
1717 }
1718 }
1719 }
1720
1721 break;
1722
1723 case 0:
1724
1725 return wordArr[ran];
1726 }
1727 return E;
1728
1729 }.expects([S],[],[N],[S,N]).returns(S)
1730
1731 }
1732
1733 ////////////////////////////////////////////////////////////////
1734 // RiString
1735 ////////////////////////////////////////////////////////////////
1736
1737 /**
1738 * @name RiString
1739 *
1740 * @class The basic text container object, implementing a variety of
1741 * additional functionality atop the javascript string object
1742 */
1743 RiString = makeClass();
1744
1745 // ////////////////////////////////////////////////////////////
1746 // Member functions
1747 // ////////////////////////////////////////////////////////////
1748
1749 RiString.prototype = {
1750
1751 /**
1752 * The RiString constructor function
1753 *
1754 * @param {string} text string the text it will contain
1755 */
1756 constructs : function(text) {
1757
1758 this._text = text;
1759
1760 }.expects([S]),
1761
1762 /**
1763 * Tests if this string ends with the specified suffix.
1764 *
1765 * @param {string} substr string the suffix.
1766 *
1767 * @returns {boolean} true if the character sequence represented by the argument is a suffix of
1768 * the character sequence represented by this object; false otherwise. *
1769 */
1770 endsWith : function(substr) {
1771
1772 return endsWith(this._text, substr);
1773
1774 }.expects([S]).returns(B),
1775
1776 /**
1777 * Compares this RiString to the specified object. The result is true if and only if the
1778 * argument is not null and is a RiString object that represents the same sequence of
1779 * characters as this object.
1780 *
1781 * @param {object} riString RiString object to compare this RiString against.
1782 * @returns {boolean} true if the RiString are equal; false otherwise.
1783 */
1784 equals : function(riString) {
1785
1786 return riString._text === this._text;
1787
1788 }.expects([O]).returns(B),
1789
1790 /**
1791 * Compares this RiString to another RiString, ignoring case considerations.
1792 *
1793 * @param {string | object} str String or RiString object to compare this RiString against
1794 * @returns {boolean} true if the argument is not null and the Strings are equal, ignoring
1795 * case; false otherwise.
1796 */
1797 equalsIgnoreCase : function(str) {
1798
1799 if (typeof str === S) {
1800
1801 return str.toLowerCase() === this._text.toLowerCase();
1802 }
1803 else {
1804
1805 return str.text().toLowerCase() === this._text.toLowerCase();
1806 }
1807
1808 }.expects([S],[O]).returns(B),
1809
1810 /**
1811 * Gets/sets the text contained by this object
1812 *
1813 * @param {string} text (optional)
1814 *
1815 * @returns {object | string} the contained text (for sets) or this RiString (for gets)
1816 */
1817 text : function(theText) {
1818 if (theText) {
1819 this._text = theText;
1820 return this;
1821 }
1822 return this._text;
1823
1824 }.expects([],[S]),
1825
1826 /**
1827 * Returns an array of part-of-speech tags, one per word, using RiTa.tokenize() and RiTa.posTag().
1828 *
1829 * @returns {array} strings of pos, one per word
1830 */
1831 pos : function() {
1832
1833 var words = RiTa.tokenize((this._text)); // was getPlaintext()
1834 var tags = PosTagger.tag(words);
1835
1836 for ( var i = 0, l = tags.length; i < l; i++) {
1837 if (!strOk(tags[i]))
1838 err("RiString: can't parse pos for:" + words[i]);
1839 }
1840
1841 return tags;
1842
1843 }.expects().returns(A),
1844
1845 /**
1846 * Returns the part-of-speech tag for the word at 'index', using RiTa.tokenize() and RiTa.posTag().
1847 *
1848 * @param {number} index the word index
1849 * @returns {string} the pos
1850 */
1851 posAt : function(index) {
1852
1853 var tags = this.pos();
1854
1855 if (isNull(tags) || tags.length == 0 || index < 0 || index >= tags.length)
1856 return E;
1857
1858 return tags[index];
1859
1860 }.expects([N]).returns(S),
1861
1862 /**
1863 * Returns the word at 'index', according to RiTa.tokenize()
1864 *
1865 * @param {number} index the word index
1866 * @returns {string} the word
1867 */
1868 wordAt : function(index) {
1869
1870 var words = RiTa.tokenize((this._text));
1871 if (index < 0 || index >= words.length)
1872 return E;
1873 return words[index];
1874
1875 }.expects([N]).returns(S),
1876
1877 /**
1878 * Returns the number of words in the object, according to RiTa.tokenize().
1879 *
1880 * @returns {number} number of words
1881 */
1882 wordCount : function() {
1883
1884 return this.words().length;
1885
1886 }.expects().returns(N),
1887
1888 /**
1889 * Returns the array of words in the object, via a call to RiTa.tokenize().
1890 *
1891 * @returns {array} strings, one per word
1892 */
1893 words : function() {
1894
1895 return RiTa.tokenize(this._text);
1896
1897 }.expects().returns(A),
1898
1899 /**
1900 * Returns the index within this string of the first occurrence of the specified character.
1901 *
1902 * @param {string} searchstring (Required) or character to search for
1903 * @param {number} start (Optional) The start position in the string to start the search. If omitted,
1904 * the search starts from position 0
1905 * @returns {number} the first index of the matching pattern or -1 if none are found
1906 */
1907 indexOf : function(searchstring, start) {
1908
1909 return this._text.indexOf(searchstring, start);
1910
1911 }.expects([S],[S,N]).returns(N),
1912
1913 /**
1914 * Inserts 'newWord' at 'wordIdx' and shifts each subsequent word accordingly.
1915 *
1916 * @returns {object} this RiString
1917 */
1918 insertWordAt : function(newWord, wordIdx) {
1919
1920 var words = this.words();
1921 if (newWord && newWord.length && wordIdx >= 0 && wordIdx < words.length) {
1922
1923 // filthy hack to preserve punctuation in 'newWord'
1924 words.splice(wordIdx,0, DeLiM+newWord+DeLiM);
1925
1926 this.text(RiTa.joinWords(words).replaceAll(DeLiM,E));
1927 }
1928
1929 return this;
1930
1931 }.expects([S,N]).returns(O),
1932
1933 /**
1934 * Returns the index within this string of the last occurrence of the specified character.
1935 *
1936 * @param {string} searchstring The string to search for
1937 * @param {number} start (Optional) The start position in the string to start the search. If omitted,
1938 * the search starts from position 0
1939 *
1940 * @returns {number} the last index of the matching pattern or -1 if none are found
1941 */
1942 lastIndexOf : function(searchstring, start) {
1943
1944 return this._text.lastIndexOf(searchstring, start);
1945
1946 }.expects([S],[S,N]).returns(N),
1947
1948 /**
1949 * Returns the length of this string.
1950 *
1951 * @returns {number} the length
1952 */
1953 length : function() {
1954
1955 return this._text.length;
1956
1957 }.expects().returns(N),
1958
1959 /**
1960 * Searches for a match between a substring (or regular expression) and the contained
1961 * string, and _returns the matches
1962 *
1963 * @param {string} regex Regular expression
1964 * @returns {array} strings matches or empty array if none are found
1965
1966 */
1967 match : function(regex) {
1968
1969 return this._text.match(regex);
1970
1971 }.expects([S],[R]).returns(A),
1972
1973
1974 /**
1975 * Extracts a part of a string from this RiString
1976 *
1977 * @param {number} begin (Required) The index where to begin the extraction. First character is at
1978 * index 0
1979 * @param {number} end (Optional) Where to end the extraction. If omitted, slice() selects all
1980 * characters from the begin position to the end of the string
1981 * @returns {object} this RiString
1982 */
1983 slice : function(begin, end) {
1984
1985 return this.text(this._text.slice(begin, end));
1986
1987 }.expects([N],[N,N]).returns(O),
1988
1989 /**
1990 * Replaces each substring of this string that matches the given regular expression with the
1991 * given replacement.
1992 *
1993 * @param {string | regex } pattern the pattern to be matched
1994 * @param {string} replacement the replacement sequence of char values
1995 * @returns {object} this RiString
1996 */
1997 replaceAll : function(pattern, replacement) {
1998
1999 if (pattern && (replacement || replacement==='')) {
2000 this._text = replaceAll(this._text, pattern, replacement);
2001 }
2002 return this;
2003
2004 }.expects([R,S],[S,S]).returns(O),
2005
2006 /**
2007 * Replaces the character at 'idx' with 'replaceWith'. If the specified 'idx' is less than
2008 * zero, or beyond the length of the current text, there will be no effect.
2009 *
2010 * @param {number} idx the character index
2011 * @param {string} replaceWith the replacement
2012 * @returns {object} this RiString
2013 */
2014 replaceCharAt : function(idx, replaceWith) {
2015
2016 if (idx < 0 || idx >= this.length())
2017 return this;
2018
2019 var s = this.text();
2020 var beg = s.substring(0, idx);
2021 var end = s.substring(idx + 1);
2022 var s2 = null;
2023
2024 if (replaceWith)
2025 s2 = beg + replaceWith + end;
2026 else
2027 s2 = beg + end;
2028
2029 return this.text(s2);
2030
2031 }.expects([N,S]).returns(O),
2032
2033 /**
2034 * Replaces the first instance of 'regex' with 'replaceWith'
2035 *
2036 * @param {string | regex} regex the pattern
2037 * @param {string} replaceWith the replacement
2038 *
2039 * @returns this RiString
2040 */
2041 replaceFirst : function(regex, replaceWith) {
2042
2043 if (replaceWith)
2044 this._text = this._text.replace(regex,replaceWith);
2045 return this;
2046
2047 }.expects([S,S],[S,R]).returns(O),
2048
2049
2050 /**
2051 * Replaces the last instance of 'regex' with 'replaceWith'
2052 *
2053 * @param {string | regex} regex the pattern
2054 * @param {string} replaceWith the replacement
2055 *
2056 * @returns this RiString
2057 */
2058 replaceLast : function(regex, replaceWith) {
2059
2060 err('unimplement');
2061
2062 }.expects([S,S],[S,R]).returns(O),
2063
2064
2065 /**
2066 * Replaces the first instance of 'regex' with 'replaceWith'
2067 *
2068 * @param {string | regex} regex the pattern
2069 * @param {string} replaceWith the replacement
2070 *
2071 * @returns this RiString
2072 */
2073 replaceFirst : function(regex, replaceWith) {
2074
2075 if (replaceWith)
2076 this._text = this._text.replace(regex,replaceWith);
2077 return this;
2078
2079 }.expects([S,S],[R,S]).returns(O),
2080
2081 /**
2082 * Replaces the word at 'wordIdx' with 'newWord'.
2083 *
2084 * @param {number} wordIdx the index
2085 * @param {string} newWord the word replacement
2086 * @returns {object} this RiString
2087 */
2088 replaceWordAt : function(wordIdx, newWord) {
2089
2090 var words = this.words();
2091
2092 if (/*newWord && */wordIdx >= 0 && wordIdx < words.length) {
2093
2094 words[wordIdx] = newWord;
2095
2096 this.text(RiTa.joinWords(words));
2097 }
2098
2099 return this;
2100
2101 }.expects([N,S]).returns(O),
2102
2103 /**
2104 * Split a RiString into an array of sub-RiString and return the new array.
2105 *
2106 * If an empty string ("") is used as the separator, the string is split between each character.
2107 *
2108 * @param {string} separator (Optional) Specifies the character to use for splitting the string. If
2109 * omitted, the entire string will be returned. If an empty string ("") is used as the separator,
2110 * the string is split between each character.
2111 *
2112 * @param {number} limit (Optional) An integer that specifies the number of splits
2113 *
2114 * @returns {array} RiStrings
2115 */
2116 split : function(separator, limit) {
2117
2118 var parts = this._text.split(separator, limit);
2119 var rs = [];
2120 for ( var i = 0; i < parts.length; i++) {
2121 if (!isNull(parts[i]))
2122 rs.push(new RiString(parts[i]));
2123 }
2124 return rs;
2125
2126 }.expects([S],[S,N],[]).returns(A),
2127
2128 /**
2129 * Tests if this string starts with the specified prefix.
2130 *
2131 * @param {string} substr string the prefix
2132 * @returns {boolean} true if the character sequence represented by the argument is a prefix of
2133 * the character sequence represented by this string; false otherwise. Note also
2134 * that true will be returned if the argument is an empty string or is equal to this
2135 * RiString object as determined by the equals() method.
2136 */
2137 startsWith : function(substr) {
2138
2139 return this.indexOf(substr) == 0;
2140
2141 }.expects([S]).returns(B),
2142
2143 /**
2144 * Extracts the characters from this objects contained string, beginning at 'start' and
2145 * continuing through the specified number of characters, and sets the current text to be
2146 * that string. (from Javascript String)
2147 *
2148 * @param {number} start The index where to start the extraction. First character is at
2149 * index 0
2150 * @param {number} length (optional) The index where to stop the extraction. If omitted, it extracts the
2151 * rest of the string
2152 * @returns {object} this RiString
2153 */
2154 substr : function(start, length) {
2155
2156 return this._text(this._text.substr(start, length));
2157
2158 }.expects([N],[N,N]).returns(O),
2159
2160 /**
2161 * Extracts the characters from a string, between two specified indices, and sets the
2162 * current text to be that string.
2163 *
2164 * @param {number} from The index where to start the extraction. First character is at
2165 * index 0
2166 * @param {number} to (optional) The index where to stop the extraction. If omitted, it extracts the
2167 * rest of the string
2168 * @returns {object} this RiString
2169 */
2170 substring : function(from, to) {
2171
2172 return this._text(this._text.substring(from, to));
2173
2174 }.expects([N],[N,N]).returns(O),
2175
2176 /**
2177 * Converts this object to an array of RiString objects, one per character
2178 *
2179 * @returns {array} RiStrings with each letter as its own RiString element
2180 */
2181 toCharArray : function() {
2182 var parts = this._text.split(E);
2183 var rs = [];
2184 for ( var i = 0; i < parts.length; i++) {
2185 if (!isNull(parts[i]))
2186 rs.push(parts[i]);
2187 }
2188 return rs;
2189 }.expects().returns(A),
2190
2191 /**
2192 * Converts all of the characters in this RiString to lower case
2193 *
2194 * @returns {object} this RiString
2195 */
2196 toLowerCase : function() {
2197
2198 return this.text(this._text.toLowerCase());
2199
2200 }.expects().returns(O),
2201
2202 /**
2203 * Returns the contained string object
2204 *
2205 * @returns {string}
2206 */
2207 toString : function() {
2208
2209 return "RiString["+this._text+"]";
2210
2211 }.expects().returns(S),
2212
2213 /**
2214 * Returns true if and only if this string contains the specified sequence of char values.
2215 *
2216 * @param {string} text text to be checked
2217 * @returns {boolean}
2218 */
2219 containsWord : function(text) {
2220
2221 return this.indexOf(text) > -1;
2222
2223 }.expects([S]).returns(B),
2224
2225 /**
2226 * Converts all of the characters in this RiString to upper case
2227 *
2228 * @returns {object} this RiString
2229 */
2230 toUpperCase : function() {
2231
2232 return this.text(this._text.toUpperCase());
2233
2234 }.expects().returns(O),
2235
2236 /**
2237 * Returns a copy of the string, with leading and trailing whitespace omitted.
2238 *
2239 * @returns {object} this RiString
2240 */
2241 trim : function() {
2242
2243 return this.text(trim(this._text));
2244
2245 }.expects().returns(O),
2246
2247 /**
2248 * Returns the character at the given 'index', or empty string if none is found
2249 *
2250 * @param {number} index index of the character
2251 * @returns {string} the character
2252 */
2253 charAt : function(index) {
2254
2255 if (index<0 || index>this._text.length-1) return E;
2256
2257 // should this return a RiString instead?
2258 return this._text.charAt(index);
2259
2260 }.expects([N]).returns(S),
2261
2262 /**
2263 * Concatenates the text from another RiString at the end of this one
2264 *
2265 * @returns {object} this RiString
2266 */
2267 concat : function(riString) {
2268
2269 return text(this._text.concat(riString.text()));
2270
2271 }.expects([O]).returns(O),
2272
2273 /**
2274 * Removes the character at the specified index
2275 *
2276 * @param {number} idx the index
2277 * @returns {object} this RiString
2278 */
2279 removeCharAt : function(idx) {
2280
2281 return this.text(this._text.substring(0, idx).concat(this._text.substring(idx + 1)));
2282
2283 }.expects([N]).returns(O)
2284
2285 };
2286
2287
2288 // ////////////////////////////////////////////////////////////
2289 // RiGrammar
2290 // ////////////////////////////////////////////////////////////
2291
2292 /**
2293 * @name RiGrammar
2294 * @class Implementation of a (probabilistic) context-free grammar (with specific
2295 * literary extensions) that performs generation from user-specified grammars.
2296 */
2297 /* <pre>
2298 *
2299 rg = new RiGrammar("mygrammar.g");
2300 System.out.println(rg.expand());</pre>
2301 *
2302 *
2303 * RiTa grammar files are JSON text files that follow the format below:
2304 * <pre> myGrammar = {
2305 <start>
2306 <rule1> | <rule2> | <rule3>
2307 }
2308
2309 {
2310 <rule2>
2311 terminal1 |
2312 terminal2 | <rule1>
2313 # this is a comment
2314 }
2315 ...</pre>
2316 * <b>Primary methods of interest:</b>
2317 * <ul>
2318 * <li><code>expand()</code> which simply begins at the <start> state and
2319 * generates a string of terminals from the grammar.<p>
2320 * <li><code>expandFrom(String)</code> which begins with the argument
2321 * String (which can consist of both non-terminals and terminals,)
2322 * and expands from there. Notice that <code>expand()</code> is simply
2323 * a convenient version of <code>expandFrom("<start>");</code>.<p>
2324 * <li><code>expandWith(String, String)</code> takes 2 String arguments, the 1st
2325 * (a terminal) is guaranteed to be substituted for the 2nd (a non-terminal). Once this
2326 * substitution is made, the algorithm then works backwards (up the tree from the leaf)
2327 * ensuring that the terminal (terminal1) appears in the output string.
2328 * For example, with the grammar fragment above, one might call:<p>
2329 <pre>
2330 grammar.expandWith(terminal1, "<rule2>");
2331 </pre>
2332 * assuring not only that <code><rule2></code>will be used at least
2333 * once in the generation process, but that when it is, it will be replaced
2334 * by the terminal "hello".
2335 *</ul>
2336 *
2337 *<li>A RiGrammar object will assign (by default) equal weights to all choices in a rule.
2338 *One can adjust the weights by adding 'multipliers' as follows: (in the rule below,
2339 * 'terminal1' will be chosen twice as often as the 2 other choices.
2340 * <pre> {
2341 <rule2>
2342 [2] terminal1 |
2343 terminal2 | <rule1>
2344 }</pre>
2345
2346 *<li>The RiGrammar object supports callbacks, from your grammar, back into your code.
2347 * To generate a callback, add the method call in your grammar, surrounded by back-ticks, as follows:
2348 * <pre>
2349 * {
2350 * <rule2>
2351 * The cat ran after the `getRhyme("cat");` |
2352 * The <noun> ran after the `pluralize(<noun>);`
2353 * }</pre>
2354 *
2355 * Any number of arguments may be passed in a callback, but for each call,
2356 * there must be a corresponding method in the sketch, e.g.,
2357 *
2358 * <pre>
2359 * function pluralize(String s) {
2360 * ...
2361 * }
2362 * </pre>
2363 *
2364 * @author dhowe
2365 */
2366 RiGrammar = makeClass();
2367
2368 RiGrammar.START_RULE = "<start>";
2369 RiGrammar.OPEN_RULE_CHAR = "<";
2370 RiGrammar.CLOSE_RULE_CHAR = ">";
2371 RiGrammar.PROB_PATT = /(.*[^\s])\s*\[([0-9.]+)\](.*)/;
2372 RiGrammar.OR_PATT = /\s*\|\s*/;
2373 RiGrammar.EXEC_PATT = /`[^`]+`/g;
2374 RiGrammar.STRIP_TICKS = /`([^`]+)`/g
2375
2376 /**
2377 * Set/gets the execDisabled flag. Set to true (default=false)
2378 * if you don't want to use the exec mechanism for callbacks. Useful if you want
2379 * to include backticks or method calls as terminals in your grammar.
2380 * @private
2381 */
2382 RiGrammar.execDisabled = function(disableExec)
2383 {
2384 if (arguments.length==1) {
2385 RiGrammar._execDisabled = disableExec;
2386 }
2387 return RiGrammar._execDisabled;
2388 }
2389
2390 RiGrammar.prototype = {
2391
2392 /**
2393 * Initializes a grammar from an object or JSON string containing the rules
2394 *
2395 * @param {string | object} grammar containing the grammar rules
2396 */
2397 constructs : function(grammar) {
2398
2399 this._rules = {};
2400 this._execDisabled = false;
2401 grammar && this.setGrammar(grammar);
2402
2403 }.expects([S],[O],[]),
2404
2405 /**
2406 * Loads a JSON grammar via AJAX call to 'url', replacing any existing grammar.
2407 * @param {string} url of JSON file containing the grammar rules
2408 * @returns {object} this RiGrammar
2409 * @private
2410 */
2411 load : function(url) {
2412
2413 this.reset();
2414
2415 err("Implement me!");
2416
2417 return this;
2418
2419 }.expects([S]).returns(O),
2420
2421 /**
2422 * Initializes a grammar from an object or JSON string containing the rules (rather than a file)
2423 * and replacing any existing grammar.
2424 * @param {string | object} grammar containing the grammar rules
2425 * @returns {object} this RiGrammar
2426 */
2427 setGrammar : function(grammar) {
2428
2429 this.reset();
2430
2431 grammar = (typeof grammar == S) ? JSON.parse(grammar) : grammar
2432
2433 for (var rule in grammar)
2434 this.addRule(rule, grammar[rule]);
2435
2436 return this;
2437
2438 }.expects([S],[O],[]).returns(O),
2439
2440 /**
2441 * Returns the current set of rules as an associative array: {names -> definitions}
2442 * @returns {object}
2443 */
2444 getRules : function() {
2445
2446 return this._rules;
2447
2448 }.expects().returns(O),
2449
2450
2451 /**
2452 * Deletes the named rule from the grammar
2453 * @returns {object} this RiGrammar
2454 */
2455 removeRule : function(name) {
2456
2457 name = this._normalizeRuleName(name);
2458 delete this._rules[name];
2459 return this;
2460
2461 }.expects([S]).returns(O),
2462
2463 /**
2464 * Makes a (deep) copy of this object
2465 *
2466 * @returns {object} this RiGrammar
2467 */
2468 clone : function() { // TODO: test me well
2469
2470 var tmp = RiGrammar();
2471 for (var name in this._rules) {
2472 tmp._rules[name] = this._rules[name];
2473 }
2474 return tmp;
2475
2476 }.expects().returns(O),
2477
2478
2479 /**
2480 * Adds a rule to the existing grammar, replacing any existing rule with the same name
2481 * @param {string} name
2482 * @param {string} ruleStr
2483 * @param {number} weight
2484 * @returns {object} this RiGrammar
2485 */
2486 addRule : function(name, ruleStr, weight)
2487 {
2488 var dbug = false;
2489
2490 weight = (isNull(weight) ? 1.0 : weight); // default
2491
2492 name = this._normalizeRuleName(name);
2493
2494 if (dbug) log("addRule: "+name+ " -> "+ruleStr+" ["+weight+"]");
2495
2496 var ruleset = ruleStr.split(RiGrammar.OR_PATT);
2497 //ruleset = "<noun-phrase> <verb-phrase>";
2498
2499 for ( var i = 0; i < ruleset.length; i++) {
2500
2501 var rule = ruleset[i];
2502 var prob = weight;
2503 var m = RiGrammar.PROB_PATT.exec(rule);
2504
2505 if (m != null) // found weighting
2506 {
2507 if (dbug) {
2508 log("Found weight for " + rule);
2509 for (i = 0; i < m.length; i++)
2510 log(" " + i + ") '" + m[i] + "'");
2511 }
2512 rule = m[1] + m[3];
2513 prob = m[2];
2514 if (dbug) log("weight=" + prob + " rule='" + rule + "'");
2515 }
2516
2517 if (this.hasRule(name)) {
2518 if (dbug)log("rule exists");
2519 var temp = this._rules[name];
2520 temp[rule] = prob;
2521 }
2522 else {
2523
2524 // log("new rule");
2525 var temp2 = {};
2526 temp2[rule] = prob;
2527 this._rules[name] = temp2;
2528 if (dbug)log("added rule: "+name);
2529 }
2530 }
2531 return this;
2532
2533 }.expects([S,S],[S,S,N]).returns(O),
2534
2535 /**
2536 * Clears all rules in the current grammar
2537 * @returns {object} this RiGrammar
2538 */
2539 reset : function() {
2540
2541 this._rules = {};
2542 return this;
2543
2544 }.expects().returns(O),
2545
2546 /**
2547 * @param {string} pre name
2548 */
2549 getRule : function(pre) {
2550
2551 pre = this._normalizeRuleName(pre);
2552
2553 // log("getRule("+pre+")");
2554 var tmp = this._rules[pre];
2555 var name, cnt = 0;
2556
2557 for (name in tmp) cnt++; // count the matching rules
2558
2559 if (cnt == 1) {
2560 //log("1returning: "+name+" / "+typeof name);
2561 return name;
2562 }
2563 else if (cnt > 1) {
2564
2565 var sr = this._getStochasticRule(tmp);
2566 //log("2returning: "+sr+" / "+typeof sr);
2567 return sr;
2568 }
2569 else {
2570 err("No rule found for: "+pre);
2571 }
2572
2573 }.expects([S]).returns(S),
2574
2575 /**
2576 * Prints the grammar rules to the console in human-readable format (useful for debugging)
2577 * @returns {object} this RiGrammar
2578 */
2579 print : function() {
2580
2581 if (console) {
2582 console.log("Grammar----------------");
2583 for ( var name in this._rules) {
2584
2585 console.log(" '" + name + "' -> ");
2586 var choices = this._rules[name];
2587 for ( var p in choices) {
2588 console.log(" '" + p + "' [" + choices[p] + "]");
2589 }
2590 }
2591 console.log("-----------------------");
2592 }
2593 return this;
2594
2595 }.expects().returns(O),
2596
2597 hasRule : function(name) {
2598
2599 //log("hasRule("+name+")");
2600 name = this._normalizeRuleName(name);
2601 return (typeof this._rules[name] !== 'undefined');
2602
2603 }.expects([S]).returns(B),
2604
2605 /**
2606 * Expands a grammar from its '<start>' symbol
2607 * @returns {string}
2608 */
2609 expand : function() {
2610
2611 return this.expandFrom(RiGrammar.START_RULE);
2612
2613 }.expects().returns(S),
2614
2615 /**
2616 * Expands the grammar after replacing an instance of the non-terminal
2617 * 'symbol' with the String in 'literal'.
2618 * <P>
2619 * Guarantees that 'literal' will be in the final expanded String,
2620 * assuming at least one instance of 'symbol' in the Grammar.
2621 * @param literal
2622 * @param symbol
2623 *
2624 * @returns {string} expanded text
2625 */
2626 expandWith : function(literal, symbol) { // TODO: finish
2627
2628 //error("oops, caught in-between versions");
2629
2630 var gr = this.clone();
2631
2632 var match = false;
2633 for ( var name in gr._rules) {
2634 if (name===symbol) {
2635 var obj = {};
2636 obj[literal] = 1.0;
2637 gr._rules[name] = obj;
2638 match = true;
2639 }
2640 }
2641 if (!match)
2642 err("Rule '"+symbol+"' not found in grammar");
2643
2644 // TODO: tmp, awful hack, write this correctly
2645 var tries, maxTries = 500;
2646 for (tries = 0 ;tries < maxTries; tries++) {
2647 var s = gr.expand();
2648 if (s.indexOf(literal)>-1)
2649 return s;
2650 }
2651 err("\n[WARN] RiGrammar failed to complete after "+tries+" tries\n");
2652
2653 }.expects([S,S]).returns(S),
2654
2655 /**
2656 * @param input
2657 * @returns this
2658 * @private
2659 */
2660 handleExec : function(input) { // TODO: private
2661
2662 if (!input || !input.length) return E;
2663
2664 // strip backticks and eval
2665 var exec = input.replace(RiGrammar.STRIP_TICKS, "$1");
2666
2667 try {
2668 //log("handleExec: "+exec);
2669 input = eval(exec);
2670 }
2671 catch (e) {
2672 warn("Error evaluating: "+input+" ignoring backticks\n "+e.message);
2673 }
2674 return input;
2675 },
2676
2677 /**
2678 * Expands the grammar, starting from the given symbol.
2679 * RiGrammar.expand() is equivalent to RiGrammar.expandFrom('').
2680 *
2681 * @param {string} rule
2682 * @returns {string}
2683 *
2684 */
2685 expandFrom : function(rule) {
2686
2687 if (!this.hasRule(rule)) {
2688 warn("Rule not found: " + rule + "\nRules: ");
2689 (!RiTa.SILENT) && this.print();
2690 }
2691
2692 var iterations = 0;
2693 var maxIterations = 1000;
2694 while (++iterations < maxIterations) {
2695
2696 //log("expand: '"+rule +"'");
2697 var next = this._expandRule(rule);
2698 if (!next) {
2699
2700 // we're done, check for back-ticked strings to eval?
2701
2702 (!this._execDisabled) && (rule=rule.replace(RiGrammar.EXEC_PATT, this.handleExec));
2703
2704 break;
2705 }
2706 rule = next;
2707 }
2708
2709 if (iterations >= maxIterations)
2710 warn("max number of iterations reached: " + maxIterations);
2711
2712 return rule;
2713
2714 }.expects([S]).returns(S),
2715
2716 // Privates (can we hide these?) ----------------
2717
2718 _expandRule : function(prod) { //private
2719
2720 var dbug = false;
2721 if (dbug) log("_expandRule(" + prod + ")");
2722
2723 for ( var name in this._rules) {
2724
2725 var entry = this._rules[name];
2726 if (dbug) log(" name=" + name+" entry=" + entry+" prod=" + prod+" idx=" + idx);
2727 var idx = prod.indexOf(name);
2728
2729 if (idx >= 0) {
2730
2731 var pre = prod.substring(0, idx);
2732 var expanded = this.getRule(name);
2733 var post = prod.substring(idx + name.length);
2734
2735 if (dbug) log(" pre=" + pre+" expanded=" + expanded+" post=" + post+" result=" + pre + expanded + post);
2736
2737 return (pre + expanded + post);
2738 }
2739
2740 // do the exec check here, in while loop()
2741 }
2742 // what happens if we get here? no expansions left, return?
2743 },
2744
2745 _normalizeRuleName : function(pre) {
2746
2747 if (!strOk(pre)) return pre;
2748
2749 if (!startsWith(pre, RiGrammar.OPEN_RULE_CHAR))
2750 pre = RiGrammar.OPEN_RULE_CHAR + pre;
2751
2752 if (!endsWith(pre,RiGrammar.CLOSE_RULE_CHAR))
2753 pre += RiGrammar.CLOSE_RULE_CHAR;
2754
2755 if (pre.indexOf('>>')>0) err(">>");
2756
2757 return pre;
2758
2759 },
2760
2761 // private?? (add structure test case)
2762 _getStochasticRule : function(temp) { // map
2763
2764 var dbug = false;
2765
2766 if (dbug) log("_getStochasticRule(" + temp + ")");
2767
2768 var p = Math.random();
2769 var result, total = 0;
2770 for ( var name in temp) {
2771 total += parseFloat(temp[name]);
2772 }
2773
2774 if (dbug) log("total=" + total+"p=" + p);
2775
2776 for ( var name in temp) {
2777 if (dbug) log(" name=" + name);
2778 var amt = temp[name] / total;
2779
2780 if (dbug) log("amt=" + amt);
2781
2782 if (p < amt) {
2783 result = name;
2784 if (dbug)log("hit!=" + name);
2785 break;
2786 } else {
2787 p -= amt;
2788 }
2789 }
2790 return result;
2791 }
2792
2793
2794 }; // end RiGrammar
2795
2796
2797 var Easing = {
2798
2799 Linear: {
2800
2801 None: function ( k ) {
2802
2803 return k;
2804
2805 }
2806
2807 },
2808
2809 Quadratic: {
2810
2811 In: function ( k ) {
2812
2813 return k * k;
2814
2815 },
2816
2817 Out: function ( k ) {
2818
2819 return k * ( 2 - k );
2820
2821 },
2822
2823 InOut: function ( k ) {
2824
2825 if ( ( k *= 2 ) < 1 ) return 0.5 * k * k;
2826 return - 0.5 * ( --k * ( k - 2 ) - 1 );
2827
2828 }
2829
2830 },
2831
2832 Cubic: {
2833
2834 In: function ( k ) {
2835
2836 return k * k * k;
2837
2838 },
2839
2840 Out: function ( k ) {
2841
2842 return --k * k * k + 1;
2843
2844 },
2845
2846 InOut: function ( k ) {
2847
2848 if ( ( k *= 2 ) < 1 ) return 0.5 * k * k * k;
2849 return 0.5 * ( ( k -= 2 ) * k * k + 2 );
2850
2851 }
2852
2853 },
2854
2855 Quartic: {
2856
2857 In: function ( k ) {
2858
2859 return k * k * k * k;
2860
2861 },
2862
2863 Out: function ( k ) {
2864
2865 return 1 - --k * k * k * k;
2866
2867 },
2868
2869 InOut: function ( k ) {
2870
2871 if ( ( k *= 2 ) < 1) return 0.5 * k * k * k * k;
2872 return - 0.5 * ( ( k -= 2 ) * k * k * k - 2 );
2873
2874 }
2875
2876 },
2877
2878 Quintic: {
2879
2880 In: function ( k ) {
2881
2882 return k * k * k * k * k;
2883
2884 },
2885
2886 Out: function ( k ) {
2887
2888 return --k * k * k * k * k + 1;
2889
2890 },
2891
2892 InOut: function ( k ) {
2893
2894 if ( ( k *= 2 ) < 1 ) return 0.5 * k * k * k * k * k;
2895 return 0.5 * ( ( k -= 2 ) * k * k * k * k + 2 );
2896
2897 }
2898
2899 },
2900
2901 Sinusoidal: {
2902
2903 In: function ( k ) {
2904
2905 return 1 - Math.cos( k * Math.PI / 2 );
2906
2907 },
2908
2909 Out: function ( k ) {
2910
2911 return Math.sin( k * Math.PI / 2 );
2912
2913 },
2914
2915 InOut: function ( k ) {
2916
2917 return 0.5 * ( 1 - Math.cos( Math.PI * k ) );
2918
2919 }
2920
2921 },
2922
2923 Exponential: {
2924
2925 In: function ( k ) {
2926
2927 return k === 0 ? 0 : Math.pow( 1024, k - 1 );
2928
2929 },
2930
2931 Out: function ( k ) {
2932
2933 return k === 1 ? 1 : 1 - Math.pow( 2, - 10 * k );
2934
2935 },
2936
2937 InOut: function ( k ) {
2938
2939 if ( k === 0 ) return 0;
2940 if ( k === 1 ) return 1;
2941 if ( ( k *= 2 ) < 1 ) return 0.5 * Math.pow( 1024, k - 1 );
2942 return 0.5 * ( - Math.pow( 2, - 10 * ( k - 1 ) ) + 2 );
2943
2944 }
2945
2946 },
2947
2948 Circular: {
2949
2950 In: function ( k ) {
2951
2952 return 1 - Math.sqrt( 1 - k * k );
2953
2954 },
2955
2956 Out: function ( k ) {
2957
2958 return Math.sqrt( 1 - --k * k );
2959
2960 },
2961
2962 InOut: function ( k ) {
2963
2964 if ( ( k *= 2 ) < 1) return - 0.5 * ( Math.sqrt( 1 - k * k) - 1);
2965 return 0.5 * ( Math.sqrt( 1 - ( k -= 2) * k) + 1);
2966
2967 }
2968
2969 },
2970
2971 Elastic: {
2972
2973 In: function ( k ) {
2974
2975 var s, a = 0.1, p = 0.4;
2976 if ( k === 0 ) return 0;
2977 if ( k === 1 ) return 1;
2978 if ( !a || a < 1 ) { a = 1; s = p / 4; }
2979 else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );
2980 return - ( a * Math.pow( 2, 10 * ( k -= 1 ) ) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) );
2981
2982 },
2983
2984 Out: function ( k ) {
2985
2986 var s, a = 0.1, p = 0.4;
2987 if ( k === 0 ) return 0;
2988 if ( k === 1 ) return 1;
2989 if ( !a || a < 1 ) { a = 1; s = p / 4; }
2990 else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );
2991 return ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );
2992
2993 },
2994
2995 InOut: function ( k ) {
2996
2997 var s, a = 0.1, p = 0.4;
2998 if ( k === 0 ) return 0;
2999 if ( k === 1 ) return 1;
3000 if ( !a || a < 1 ) { a = 1; s = p / 4; }
3001 else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );
3002 if ( ( k *= 2 ) < 1 ) return - 0.5 * ( a * Math.pow( 2, 10 * ( k -= 1 ) ) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) );
3003 return a * Math.pow( 2, -10 * ( k -= 1 ) ) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) * 0.5 + 1;
3004
3005 }
3006
3007 },
3008
3009 Back: {
3010
3011 In: function ( k ) {
3012
3013 var s = 1.70158;
3014 return k * k * ( ( s + 1 ) * k - s );
3015
3016 },
3017
3018 Out: function ( k ) {
3019
3020 var s = 1.70158;
3021 return --k * k * ( ( s + 1 ) * k + s ) + 1;
3022
3023 },
3024
3025 InOut: function ( k ) {
3026
3027 var s = 1.70158 * 1.525;
3028 if ( ( k *= 2 ) < 1 ) return 0.5 * ( k * k * ( ( s + 1 ) * k - s ) );
3029 return 0.5 * ( ( k -= 2 ) * k * ( ( s + 1 ) * k + s ) + 2 );
3030
3031 }
3032
3033 },
3034
3035 Bounce: {
3036
3037 In: function ( k ) {
3038
3039 return 1 - Easing.Bounce.Out( 1 - k );
3040
3041 },
3042
3043 Out: function ( k ) {
3044
3045 if ( k < ( 1 / 2.75 ) ) {
3046
3047 return 7.5625 * k * k;
3048
3049 } else if ( k < ( 2 / 2.75 ) ) {
3050
3051 return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;
3052
3053 } else if ( k < ( 2.5 / 2.75 ) ) {
3054
3055 return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;
3056
3057 } else {
3058
3059 return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;
3060
3061 }
>>>>>>> 333adb8c05f2add16a5abb95e4aada7b2c2f4a8e
3062
3063 },
3064
3065 InOut: function ( k ) {
3066
<<<<<<< HEAD
3067 if ( k === 0 ) return 0;
3068 if ( k === 1 ) return 1;
3069 if ( ( k *= 2 ) < 1 ) return 0.5 * Math.pow( 1024, k - 1 );
3070 return 0.5 * ( - Math.pow( 2, - 10 * ( k - 1 ) ) + 2 );
3071
3072 }
3073
3074 },
3075
3076 Circular: {
3077
3078 In: function ( k ) {
3079
3080 return 1 - Math.sqrt( 1 - k * k );
3081
3082 },
3083
3084 Out: function ( k ) {
3085
3086 return Math.sqrt( 1 - --k * k );
3087
3088 },
3089
3090 InOut: function ( k ) {
3091
3092 if ( ( k *= 2 ) < 1) return - 0.5 * ( Math.sqrt( 1 - k * k) - 1);
3093 return 0.5 * ( Math.sqrt( 1 - ( k -= 2) * k) + 1);
3094
3095 }
3096
3097 },
3098
3099 Elastic: {
3100
3101 In: function ( k ) {
3102
3103 var s, a = 0.1, p = 0.4;
3104 if ( k === 0 ) return 0;
3105 if ( k === 1 ) return 1;
3106 if ( !a || a < 1 ) { a = 1; s = p / 4; }
3107 else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );
3108 return - ( a * Math.pow( 2, 10 * ( k -= 1 ) ) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) );
3109
3110 },
3111
3112 Out: function ( k ) {
3113
3114 var s, a = 0.1, p = 0.4;
3115 if ( k === 0 ) return 0;
3116 if ( k === 1 ) return 1;
3117 if ( !a || a < 1 ) { a = 1; s = p / 4; }
3118 else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );
3119 return ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );
3120
3121 },
3122
3123 InOut: function ( k ) {
3124
3125 var s, a = 0.1, p = 0.4;
3126 if ( k === 0 ) return 0;
3127 if ( k === 1 ) return 1;
3128 if ( !a || a < 1 ) { a = 1; s = p / 4; }
3129 else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );
3130 if ( ( k *= 2 ) < 1 ) return - 0.5 * ( a * Math.pow( 2, 10 * ( k -= 1 ) ) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) );
3131 return a * Math.pow( 2, -10 * ( k -= 1 ) ) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) * 0.5 + 1;
3132
3133 }
3134
3135 },
3136
3137 Back: {
3138
3139 In: function ( k ) {
3140
3141 var s = 1.70158;
3142 return k * k * ( ( s + 1 ) * k - s );
3143
3144 },
3145
3146 Out: function ( k ) {
3147
3148 var s = 1.70158;
3149 return --k * k * ( ( s + 1 ) * k + s ) + 1;
3150
3151 },
3152
3153 InOut: function ( k ) {
3154
3155 var s = 1.70158 * 1.525;
3156 if ( ( k *= 2 ) < 1 ) return 0.5 * ( k * k * ( ( s + 1 ) * k - s ) );
3157 return 0.5 * ( ( k -= 2 ) * k * ( ( s + 1 ) * k + s ) + 2 );
3158
3159 }
3160
3161 },
3162
3163 Bounce: {
3164
3165 In: function ( k ) {
3166
3167 return 1 - Easing.Bounce.Out( 1 - k );
3168
3169 },
3170
3171 Out: function ( k ) {
3172
3173 if ( k < ( 1 / 2.75 ) ) {
3174
3175 return 7.5625 * k * k;
3176
3177 } else if ( k < ( 2 / 2.75 ) ) {
3178
3179 return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;
3180
3181 } else if ( k < ( 2.5 / 2.75 ) ) {
3182
3183 return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;
3184
3185 } else {
3186
3187 return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;
3188
3189 }
3190
3191 },
3192
3193 InOut: function ( k ) {
3194
3195 if ( k < 0.5 ) return Easing.Bounce.In( k * 2 ) * 0.5;
3196 return Easing.Bounce.Out( k * 2 - 1 ) * 0.5 + 0.5;
3197
3198 }
3199
3200 }
3201
3202 }
3203
3204 var Interpolation = {
3205
3206 Linear: function ( v, k ) {
3207
3208 var m = v.length - 1, f = m * k, i = Math.floor( f ), fn = Interpolation.Utils.Linear;
3209
3210 if ( k < 0 ) return fn( v[ 0 ], v[ 1 ], f );
3211 if ( k > 1 ) return fn( v[ m ], v[ m - 1 ], m - f );
3212
3213 return fn( v[ i ], v[ i + 1 > m ? m : i + 1 ], f - i );
3214
3215 },
3216
3217 Bezier: function ( v, k ) {
3218
3219 var b = 0, n = v.length - 1, pw = Math.pow, bn = Interpolation.Utils.Bernstein, i;
3220
3221 for ( i = 0; i <= n; i++ ) {
3222 b += pw( 1 - k, n - i ) * pw( k, i ) * v[ i ] * bn( n, i );
3223 }
3224
3225 return b;
3226
3227 },
3228
3229 CatmullRom: function ( v, k ) {
3230
3231 var m = v.length - 1, f = m * k, i = Math.floor( f ), fn = Interpolation.Utils.CatmullRom;
3232
3233 if ( v[ 0 ] === v[ m ] ) {
3234
3235 if ( k < 0 ) i = Math.floor( f = m * ( 1 + k ) );
3236
3237 return fn( v[ ( i - 1 + m ) % m ], v[ i ], v[ ( i + 1 ) % m ], v[ ( i + 2 ) % m ], f - i );
3238
3239 } else {
3240
3241 if ( k < 0 ) return v[ 0 ] - ( fn( v[ 0 ], v[ 0 ], v[ 1 ], v[ 1 ], -f ) - v[ 0 ] );
3242 if ( k > 1 ) return v[ m ] - ( fn( v[ m ], v[ m ], v[ m - 1 ], v[ m - 1 ], f - m ) - v[ m ] );
3243
3244 return fn( v[ i ? i - 1 : 0 ], v[ i ], v[ m < i + 1 ? m : i + 1 ], v[ m < i + 2 ? m : i + 2 ], f - i );
3245
3246 }
3247
3248 },
3249
3250 Utils: {
3251
3252 Linear: function ( p0, p1, t ) {
3253
3254 return ( p1 - p0 ) * t + p0;
3255
3256 },
3257
3258 Bernstein: function ( n , i ) {
3259
3260 var fc = Interpolation.Utils.Factorial;
3261 return fc( n ) / fc( i ) / fc( n - i );
3262
3263 },
3264
3265 Factorial: ( function () {
3266
3267 var a = [ 1 ];
3268
3269 return function ( n ) {
3270
3271 var s = 1, i;
3272 if ( a[ n ] ) return a[ n ];
3273 for ( i = n; i > 1; i-- ) s *= i;
3274 return a[ n ] = s;
3275
3276 }
3277
3278 } )(),
3279
3280 CatmullRom: function ( p0, p1, p2, p3, t ) {
3281
3282 var v0 = ( p2 - p0 ) * 0.5, v1 = ( p3 - p1 ) * 0.5, t2 = t * t, t3 = t * t2;
3283 return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;
3284
3285 }
3286
3287 }
3288
3289 }
3290
3291 //////////////////////////////////////////////////////////////////////
3292 ////////// RiText
3293 //////////////////////////////////////////////////////////////////////
3294
3295 /**
3296 * @name RiText
3297 *
3298 * @class RiTa's text display object. Wraps an instance of RiString to provide utility
3299 * methods for typography, text effects, animation, etc. Uses either the native canvas
3300 * renderer or the Processing renderer (when included)
3301 *
3302 * @property {number} x The x position
3303 * @property {number} y The y position
3304 */
3305 RiText = makeClass();
3306
3307 //////////////////////////////////////////////////////////////////////
3308 //////// RiText statics
3309 //////////////////////////////////////////////////////////////////////
3310
3311 /**
3312 * Static container for properties related to the update/render loop
3313 */
3314 RiText._animator = {
3315 loopId : -1,
3316 actualFPS : 0,
3317 targetFPS : 60,
3318 isLooping : false,
3319 frameCount : 0,
3320 loopStarted : false,
3321 framesSinceLastFPS : 0,
3322 callbackDisabled : false,
3323 timeSinceLastFPS : Date.now()
3324 }
3325
3326 /**
3327 * Starts a timer that calls 'onRiTaEvent' or the specified callback every 'period'
3328 * seconds
3329 *
3330 * @param {number} period
3331 * @param {function} callback called every 'period' seconds
3332 * @returns {number} the unique id for the timer
3333 */
3334 RiText.timer = function(period, callback) {
3335
3336 return RiTa.timer.apply(this,arguments);
3337 },
3338
3339 /**
3340 * Returns the number of frames since the start of the sketch
3341 * @returns {number} the number of frames
3342 */
3343 RiText.frameCount = function() {
3344 return RiText._animator.frameCount;
3345 }
3346
3347 /**
3348 * Immediately stops the current animation loop and clears
3349 */
3350 RiText.noLoop = function() {
3351 var an = RiText._animator;
3352 an.isLooping = false;
3353 an.loopStarted = false;
3354 an.clearInterval(loopId);
3355 }
3356
3357 /**
3358 * Starts an animation loop that calls the specified callback (usually 'draw')
3359 * at the specified fps
3360 *
3361 * @param {function} callback the animation callback (optional, default=60)
3362 * @param {number} fps the target framesPerSecond (optional, default='draw')
3363 * <pre>
3364 * Examples:
3365 * RiText.loop();
3366 * RiText.loop('draw');
3367 * RiText.loop(30);
3368 * RiText.loop(draw, 10);
3369 * </pre>
3370 */
3371 RiText.loop = function(callbackFun, fps) {
3372
3373 var a = arguments, g = RiText.renderer, an = RiText._animator, callback = window['draw'];
3374
3375 if (g._type() === 'Processing') return; // let P5 do its own loop?
3376
3377 if (an.loopStarted) return;
3378
3379 switch (a.length) {
3380
3381 case 1:
3382
3383 if (a[0]) {
3384 var type = Type.get(a[0]);
3385 if (type == F) {
3386 callback = a[0];
3387 }
3388 else if (type == N) {
3389 an.targetFPS = a[0];
3390 }
3391 }
3392 break;
3393
3394 case 2:
3395
3396 if (a[0]) {
3397
3398 var type = Type.get(a[0]);
3399 if (type == F) {
3400 callback = a[0];
3401 }
3402 type = Type.get(a[1])
3403 if (type == N) {
3404 an.targetFPS = a[1];
3405 }
3406 }
3407 break;
3408 }
3409
3410 an.timeSinceLastFPS = Date.now(), an.framesSinceLastFPS = 0, mps = 1E3 / an.targetFPS;
3411
3412 if (callback && !an.callbackDisabled) {
3413
3414 an.loopId = window.setInterval(function() {
3415
3416 try {
3417
3418 callback();
3419
3420 var sec = (Date.now() - an.timeSinceLastFPS) / 1E3;
3421 var fps = ++an.framesSinceLastFPS / sec;
3422
3423 if (sec > 0.5) {
3424 an.timeSinceLastFPS = Date.now();
3425 an.framesSinceLastFPS = 0;
3426 an.actualFPS = fps;
3427 }
3428 an.frameCount++;
3429
3430 } catch(ex) {
3431
3432 if (!an.callbackDisabled) {
3433 console.warn("Unable to invoke callback: "+callback);
3434 an.callbackDisabled = true;
3435 }
3436 window.clearInterval(an.loopId);
3437 console.trace(this);
3438 throw ex;
3439 }
3440 }, mps);
3441
3442 an.isLooping = true;
3443 an.loopStarted = true;
3444 }
3445
3446 }
3447
3448 /**
3449 * Convenience method to get the height of the current drawing surface
3450 * @returns {number} width
3451 */
3452 RiText.width = function() { return RiText.renderer._width(); }
3453
3454
3455 /**
3456 * Convenience method to get the height of the current drawing surface
3457 * @returns {number} height
3458 */
3459 RiText.height = function() { return RiText.renderer._height(); }
3460
3461 /**
3462 * Convenience method to draw a crisp line on the drawing surface
3463 * @param {number} x1
3464 * @param {number} y1
3465 * @param {number} x2
3466 * @param {number} y2
3467 * @param {number} lineWidth (optional: default=1)
3468 */
3469 RiText.line = function(x1, y1, x2, y2, lineWidth) {
3470
3471 var g = RiText.renderer;
3472 g._pushState();
3473 g._line(x1, y1, x2, y2, lineWidth || 1);
3474 g._popState();
3475 }
3476
3477 /**
3478 * Convenience method to set the size of the drawing surface in the current
3479 * renderer context
3480 * @param {number} w width
3481 * @param {number} h height
3482 */
3483 RiText.size = function(w,h/*renderer*/) {
3484
3485 RiText.renderer._size(w,h/*renderer*/);
3486 }
3487
3488 /**
3489 * Returns the current graphics context, either a canvas 2d'-context or ProcessingJS instance
3490 * @returns {object}
3491 */
3492 RiText.graphics = function() {
3493
3494 return RiText.renderer._getGraphics();
3495 }
3496
3497 /**
3498 * Returns a random color in which the 3 values for rgb (or rgba if 'includeAlpha' is true),
3499 * are between min and max
3500 *
3501 * @param {number} min value
3502 * @param {number} max value
3503 * @param {boolean} includeAlpha true if includes alpha
3504 * @returns {array} numbers - [r,g,b] or [r,g,b,a]
3505 */
3506 RiText.randomColor = function(min,max,includeAlpha) {
3507
3508 min = min || 0, max = max || 256;
3509 var col = [RiText.random(min,max),RiText.random(min,max),RiText.random(min,max)];
3510 if (includeAlpha) col.push(RiText.random(min,max));
3511 return col;
3512 }
3513
3514 /**
3515 * Returns a random number between 'min' (default 0) and 'max
3516 * @returns {number}
3517 */
3518 RiText.random = function() {
3519
3520 return RiTa.random.apply(this,arguments);
3521 }
3522
3523 /**
3524 * Convenience method to get the distance between 2 points
3525 * @param {number} x1
3526 * @param {number} y1
3527 * @param {number} x2
3528 * @param {number} y2
3529 *
3530 * @returns {number}
3531 */
3532 RiText.distance = function() {
3533
3534 return RiTa.distance.apply(this,arguments);
3535 }
3536
3537 /**
3538 * Convenience method to fill drawing surface background with specified color
3539 * @param {number} r
3540 * @param {number} g
3541 * @param {number} b
3542 * @param {number} a
3543 */
3544 RiText.background = function(r,g,b,a) {
3545
3546 var br, bg, bb, ba=255, r = (typeof r == N) ? r : 255;
3547
3548 if (arguments.length >= 3) {
3549 br = r;
3550 bg = g;
3551 bb = b;
3552 }
3553 if (arguments.length == 4) {
3554 ba = a;
3555 }
3556 if (arguments.length <= 2) {
3557 br = r;
3558 bg = r;
3559 bb = r;
3560 }
3561 if (arguments.length == 2) {
3562 ba = g;
3563 }
3564
3565 RiText.renderer._background(br,bg,bb,ba);
3566 }
3567
3568
3569 /**
3570 * Returns the mouse position from a mouse event
3571 * in a cross-browser -ompatible fashion
3572 * @param {MouseEvent} e mouseEvent
3573 * @returns {object} mouse position with x,y properties
3574 */
3575 RiText.mouse = function(e) {
3576
3577 var posX = -1,posY = -1;
3578
3579 if (!e) var e = window.event;
3580 if (!e && !RiText.mouse.printedWarning) {
3581 console.warn("Unable to determine mouse position without an event!");
3582 RiText.mouse.printedWarning = true;
3583 }
3584
3585 if (e.pageX) {
3586 posX = e.pageX;
3587 }
3588 else if (e.clientX) {
3589 posX = e.clientX + document.body.scrollLeft
3590 + document.documentElement.scrollLeft;
3591 }
3592
3593 if (e.pageY) {
3594 posY = e.pageY;
3595 }
3596 else if (e.clientY) {
3597 posY = e.clientY + document.body.scrollTop
3598 + document.documentElement.scrollTop;
3599 }
3600
3601
3602 return {x:posX,y:posY};
3603 }
3604
3605 // /**
3606 // * Returns the mouseY position from a mouse event
3607 // * in a cross-browser compatible fashion
3608 // * @param mouseEvent
3609 // */
3610 // RiText.mouseY = function(e) {
3611 //
3612 // return posY;
3613 // }
3614 //
3615 /**
3616 * Returns all RiTexts that contain the point x,y or null if none do.
3617 * <p>
3618 * Note: this will return an array even if only one item is picked, therefore,
3619 * you should generally use it as follows:
3620 *
3621 * @example
3622 * var rts = RiText.getPicked(mx, my);
3623 * if (rts.length) {
3624 * rts[0].doSomething();
3625 * }
3626 *
3627 *
3628 * @param {number} x
3629 * @param {number} y
3630 *
3631 * @returns {array} RiText[] 1 or more RiTexts containing
3632 * the point, or null if none do.
3633 */
3634 RiText.picked = function(x, y)
3635 {
3636 var hits = [];
3637 for (var i = 0; i < RiText.instances.length; i++)
3638 {
3639 var rt = RiText.instances[i];
3640 rt.contains(x, y) && hits.push(rt);
3641 }
3642 return hits;
3643 }
3644
3645 RiText.dispose = function(toDelete) {
3646
3647 Type.is(toDelete,A) && _disposeArray(toDelete);
3648 Type.is(toDelete,O) && _disposeOne(toDelete);
3649 }
3650
3651 RiText.disposeAll = function() {
3652
3653 for ( var i = 0; i < RiText.instances.length; i++) {
3654
3655 if (RiText.instances[i]) {
3656
3657 delete(RiText.instances[i]._rs);
3658 delete(RiText.instances[i]);
3659 }
3660 }
3661 RiText.instances = [];
3662 }
3663
3664 // TODO: if txt is an array, maintain line breaks... ?
3665 // TODO: other alignments?
3666 RiText.createLines = function(txt, x, y, maxW, maxH, theFont) {
3667
3668 // remove line breaks
3669 txt = replaceAll(txt, "[\r\n]", SP);
3670
3671 // adds spaces around html tokens
3672 txt = replaceAll(txt," ?(<[^>]+>) ?", " $1 ");
3673
3674 // split into array of words
3675 var tmp = txt.split(SP), words = [];
3676 for ( var i = tmp.length - 1; i >= 0; i--)
3677 words.push(tmp[i]);
3678
3679 if (!words.length) return [];
3680
3681 var g = RiText.renderer;
3682 var fn = RiText.createLines;
3683
3684 // helpers functions //////////////////////////////////////// ?
3685
3686 fn.checkLineHeight = fn.checkLineHeight || function(currentH, lineH, maxH) {
3687
3688 return currentH + lineH <= maxH;
3689 };
3690
3691 fn.addLine = fn.addLine || function(arr, s) {
3692 if (s && s.length) {
3693 // strip trailing spaces (regex?)
3694 while (s.length > 0 && endsWith(s, " "))
3695 s = s.substring(0, s.length - 1);
3696 arr.push(s);
3697 }
3698 };
3699
3700 // the guts ////////////////////////////////////////////////
3701
3702 theFont = theFont || _getDefaultFont();
3703
3704 var tmp = new RiText('_',0,0,theFont), textH = tmp.textHeight();
3705 RiText.dispose(tmp);
3706
3707 var currentH = 0, currentW = 0, newParagraph = false, forceBreak = false, strLines = [],
3708 sb = RiText.defaults.indentFirstParagraph ? RiText.defaults.paragraphIndent : E;
3709
3710 while (words.length > 0) {
3711
3712 var next = words.pop();
3713
3714 if (next.length == 0) continue;
3715
3716 if (startsWith(next, '<') && endsWith(next, ">")) {
3717
3718 if (next === RiText.NON_BREAKING_SPACE || next === "</sp>") {
3719
3720 sb += SP;
3721 }
3722 else if (next === RiText.PARAGRAPH || next === "</p>") {
3723
3724 if (sb.length > 0) {// case: paragraph break
3725
3726 newParagraph = true;
3727 }
3728 else if (RiText.indentFirstParagraph) {
3729
3730 sb += RiText.defaults.paragraphIndent;
3731 }
3732 }
3733 else if (endsWith(next, RiText.LINE_BREAK) || next === "</br>") {
3734
3735 forceBreak = true;
3736 }
3737 continue;
3738 }
3739
3740 currentW = g._textWidth(theFont, sb + next);
3741
3742 // check line-length & add a word
3743 if (!newParagraph && !forceBreak && currentW < maxW) {
3744
3745 sb += next + " ";
3746 }
3747 else // new paragraph or line-break
3748 {
3749 // check vertical space, add line & next word
3750 if (fn.checkLineHeight(currentH, textH, maxH)) {
3751
3752 fn.addLine(strLines, sb);
3753 sb = E;
3754
3755 if (newParagraph) { // do indent
3756
3757 sb += RiText.defaults.paragraphIndent;
3758 if (RiText.defaults.paragraphLeading > 0) {
3759 sb += '|'; // filthy
3760 }
3761 }
3762 newParagraph = false;
3763 forceBreak = false;
3764 sb += next + SP;//addWord(sb, next);
3765
3766 currentH += textH; // DCH: changed(port-to-js), 3.3.12
3767 // currentH += lineHeight;
3768 }
3769 else {
3770
3771 if (next != null) words.push(next);
3772 break;
3773 }
3774 }
3775 }
3776
3777 // check if leftover words can make a new line
3778 if (fn.checkLineHeight(currentH, textH, maxH)) {
3779
3780 fn.addLine(strLines, sb);
3781 sb = E;
3782 }
3783 else {
3784 var tmp = sb.split(SP);
3785 for ( var i = tmp.length - 1; i >= 0; i--) {
3786 words.push(tmp[i]);
3787 }
3788 //fn.pushLine(words, sb.split(SP));
3789 }
3790
3791 if (!strLines.length) err('Unexpected fail in createLines: no lines');
3792
3793 // lay out the lines
3794 var rts = RiText._createLinesByCharCountFromArray(strLines, x, y+textH, theFont);
3795
3796 // set the paragraph spacing
3797 if (RiText.defaults.paragraphLeading > 0) {
3798
3799 var lead = 0;
3800 for (var i = 0; i < rts.length; i++) {
3801
3802 var str = rts[i].text();
3803 var idx = str.indexOf('|');
3804 if (idx > -1) {
3805 lead += RiText.defaults.paragraphLeading;
3806 rts[i].removeCharAt(idx);
3807 }
3808 rts[i].y += lead;
3809 }
3810 }
3811
3812 // check all the lines are still in the rect
3813 var toKill = [];
3814 var check = rts[rts.length - 1];
3815 for (var z = 1; check.y > y + maxH; z++) {
3816
3817 toKill.push(check);
3818 var idx = rts.length - 1 - z;
3819 if (idx < 0) break;
3820 check = rts[idx];
3821 }
3822
3823 // remove the dead ones
3824 for (var z = 0; z < toKill.length; z++) {
3825
3826 removeFromArray(rts, toKill[z]);
3827 }
3828
3829 _disposeArray(toKill);
3830
3831
3832 return rts;
3833 }
3834
3835 // TODO: add example
3836 /**
3837 * Sets/gets the default font size for all RiTexts
3838 * @param {object} motionType
3839 * @returns {object} the current default motionType
3840 */
3841 RiText.defaultMotionType = function(motionType) {
3842
3843 if (arguments.length==1)
3844 RiText.defaults.motionType = motionType;
3845 return RiText.defaults.motionType;
3846 }
3847
3848 // TODO: add example
3849 /**
3850 * Sets/gets the default alignment for all RiTexts
3851 * @param {number} align (optional, for sets only)
3852 * @returns {number} the current default alignment
3853 */
3854 RiText.defaultAlignment = function(align) {
3855
3856 if (arguments.length==1)
3857 RiText.defaults.alignment = align;
3858 return RiText.defaults.alignment;
3859 }
3860
3861 /**
3862 * Sets/gets the default font size for all RiTexts
3863 * @param {number} size (optional, for sets only)
3864 * @returns {number} the current default font size
3865 */
3866 RiText.defaultFontSize = function(size) {
3867
3868 if (arguments.length==1)
3869 RiText.defaults.fontSize = size;
3870 return RiText.defaults.fontSize;
3871 }
3872
3873 /**
3874 * Sets/gets the default bounding box visibility
3875 * @param {boolean} size (optional, for sets only)
3876 * @returns {boolean} the current default bounding box visibility
3877 */
3878 RiText.showBoundingBoxes = function(value) {
3879
3880 if (arguments.length==1)
3881 RiText.defaults.boundingBoxVisible = value;
3882 return RiText.defaults.boundingBoxVisible;
3883 }
3884
3885 /**
3886 * Sets/gets the default font for all RiTexts
3887 * @param {object} font (optional, for sets only)
3888 * @returns {object} the current default font
3889 */
3890 RiText.defaultFont = function(font) {
3891
3892 var a = arguments;
3893 if (a.length == 1 && typeof a[0] == O) {
3894 RiText.defaults.font = a[0];
3895 }
3896 else if (a.length > 1) {
3897 RiText.defaults.font = RiText.renderer._createFont.apply(RiText.renderer,a);
3898 }
3899 return RiText.defaults.font;
3900 }
3901
3902 RiText.createFont = function(fontName, fontSize, leading) {
3903
3904 if (!fontName) err('RiText.createFont requires fontName');
3905
3906 fontSize = fontSize || RiText.defaults.fontSize;
3907
3908 return RiText.renderer._createFont(fontName, fontSize, leading);
3909 }
3910
3911 RiText.createWords = function(txt, x, y, w, h, fontObj) {
3912
3913 return _createRiTexts(txt, x, y, w, h, fontObj, RiText.prototype.splitWords);
3914 }
3915
3916 RiText.createLetters = function(txt, x, y, w, h, fontObj) {
3917
3918 return _createRiTexts(txt, x, y, w, h, fontObj, RiText.prototype.splitLetters);
3919 }
3920
3921 // private statics ///////////////////////////////////////////////////////////////
3922
3923 // make a sub-case of _createLinesByCharCount(() ?
3924 RiText._createLinesByCharCountFromArray = function(txtArr, startX, startY, fontObj) {
3925
3926 //log('createLinesByCharCountFromArray('+txtArr.length+','+startX+','+startY+','+maxCharsPerLine+','+fontObj+')');
3927
3928 fontObj = fontObj || _getDefaultFont();
3929
3930 var rts = [];
3931 for ( var i = 0; i < txtArr.length; i++) {
3932 //log(i+")"+txtArr[i]);
3933 rts.push(RiText(txtArr[i], startX, startY, fontObj));
3934 }
3935
3936 if (rts.length < 1) return [];
3937
3938 return _handleLeading(fontObj, rts, startY);
3939 }
3940
3941 // TODO: if txt is an array, maintain line breaks... ? Is this even being used??
3942 // TODO: should this be private -- need a way to respect line-breaks in createWords, createLetters, etc. - add test
3943 RiText._createLinesByCharCount = function(txt, startX, startY, maxCharsPerLine, fontObj) {
3944
3945 //log("RiText._createLinesByCharCount(("+txt+", "+startX+","+startY+", "+maxCharsPerLine+", "+fontObj+")");
3946
3947 if (!maxCharsPerLine || maxCharsPerLine<0) maxCharsPerLine = Number.MAX_VALUE;
3948
3949 if (txt == null || txt.length == 0) return new Array();
3950
3951 if (txt.length < maxCharsPerLine) return [ new RiText(txt, startX, startY) ];
3952
3953 // remove any line breaks from the original
3954 txt = replaceAll(txt,"\n", " ");
3955
3956 var texts = [];
3957 while (txt.length > maxCharsPerLine) {
3958 var toAdd = txt.substring(0, maxCharsPerLine);
3959 txt = txt.substring(maxCharsPerLine, txt.length);
3960
3961 var idx = toAdd.lastIndexOf(" ");
3962 var end = "";
3963 if (idx >= 0) {
3964 end = toAdd.substring(idx, toAdd.length);
3965 if (maxCharsPerLine < Number.MAX_VALUE) end = end.trim();
3966 toAdd = toAdd.substring(0, idx);
3967 }
3968 texts.push(new RiText(toAdd.trim(), startX, startY));
3969 txt = end + txt;
3970 }
3971
3972 if (txt.length > 0) {
3973 if (maxCharsPerLine < Number.MAX_VALUE) txt = txt.trim();
3974 texts.push(new RiText(txt, startX, startY));
3975 }
3976
3977 return _handleLeading(fontObj, texts, startY);
3978 }
3979
3980 _createRiTexts = function(txt, x, y, w, h, fontObj, splitFun) // private
3981 {
3982 if (!txt || !txt.length) return [];
3983 fontObj = fontObj || _getDefaultFont();
3984
3985 var rlines = RiText.createLines(txt, x, y, w, h, fontObj);
3986 if (!rlines) return [];
3987
3988 var result = [];
3989 for ( var i = 0; i < rlines.length; i++) {
3990
3991 var rts = splitFun.call(rlines[i]);
3992 for ( var j = 0; j < rts.length; j++)
3993 result.push(rts[j].font(fontObj)); // add the words
3994
3995 RiText.dispose(rlines[i]);
3996 }
3997
3998 return result;
3999 }
4000
4001
4002 // Returns the pixel x-offset for the word at 'wordIdx' (make private in RiText)
4003 _wordOffsetFor = function(rt, words, wordIdx) {
4004
4005 //log("wordOffset("+words+","+wordIdx+")");
4006
4007 if (wordIdx < 0 || wordIdx >= words.length)
4008 throw new Error("Bad wordIdx=" + wordIdx + " for " + words);
4009
4010 rt.g._pushState();
4011
4012 var xPos = rt.x;
4013
4014 if (wordIdx > 0) {
4015
4016 var pre = words.slice(0, wordIdx);
4017 var preStr = '';
4018 for ( var i = 0; i < pre.length; i++) {
4019 preStr += pre[i] + ' ';
4020 }
4021
4022 var tw = rt.g._textWidth(rt._font, preStr);
4023
4024 //log("x="+xPos+" pre='"+preStr+"' tw=" + tw);
4025
4026 switch (rt._alignment) {
4027 case RiText.LEFT:
4028 xPos = rt.x + tw;
4029 break;
4030 case RiText.RIGHT:
4031 xPos = rt.x - tw;
4032 break;
4033 case RiText.CENTER:
4034 console.warn("TODO: test center-align here");
4035 xPos = rt.x; // ?
4036 break;
4037 }
4038 }
4039 rt.g._popState();
4040
4041 return xPos;
4042 }
4043
4044 _handleLeading = function(fontObj, rts, startY) {
4045
4046 if (!rts || !rts.length) return;
4047
4048 fontObj = fontObj || _getDefaultFont();
4049
4050 var nextHeight = startY;
4051 rts[0].font(fontObj);
4052 for ( var i = 0; i < rts.length; i++) {
4053
4054 if (fontObj) rts[i].font(fontObj); // set the font
4055 rts[i].y = nextHeight; // adjust y-pos
4056 nextHeight += fontObj.leading;
4057 }
4058
4059 return rts;
4060 }
4061
4062 _disposeOne = function(toDelete) {
4063
4064 removeFromArray(RiText.instances, toDelete);
4065
4066 if (toDelete) {
4067 delete(toDelete._rs);
4068 delete(toDelete);
4069 }
4070
4071 }
4072
4073 _disposeArray = function(toDelete) {
4074
4075 for ( var i = 0; i < toDelete.length; i++) {
4076
4077 _disposeOne(toDelete[i]);
4078 }
4079 }
4080
4081 // TODO: test this font default across all platforms and browsers
4082
4083 _getDefaultFont = function() { // make private??
4084
4085 //log("_getDefaultFont: "+RiText.defaults.fontFamily+","+RiText.defaults.font.size);
4086
4087 RiText.defaults.font = RiText.defaults.font ||
4088 RiText.renderer._createFont(RiText.defaults.fontFamily,
4089 RiText.defaults.fontSize, RiText.defaults.fontLeading);
4090
4091 return RiText.defaults.font;
4092 }
4093
4094 /**
4095 * A convenience method to call a member function on each RiText in the array,
4096 * or all existing RiText objects (with no argument)
4097 * @param {array} theFunction defaults to all riText if an array is not supplied (optional, default=all)
4098 */
4099 RiText.foreach = function(theFunction) {
4100
4101 if (arguments.length == 1 && Type.is(array,A)) {
4102 for ( var i = 0; i < array.length; i++)
4103 array[i] && array[i].theFunction();
4104 }
4105 else {
4106 for ( var i = 0; i < RiText.instances.length; i++)
4107 RiText.instances[i] && RiText.instances[i].theFunction();
4108 }
4109
4110 }
4111
4112 /**
4113 * A convenience method to draw all existing RiText objects (with no argument)
4114 * or an array of RiText objects (if supplied as an argument)
4115 * @param {array} array draws only the array if supplied (optional)
4116 */
4117 RiText.drawAll = function(array) {
4118
4119 if (arguments.length == 1 && Type.is(array,A)) {
4120 for ( var i = 0; i < array.length; i++)
4121 array[i] && array[i].draw();
4122 }
4123 else {
4124 for ( var i = 0; i < RiText.instances.length; i++)
4125 RiText.instances[i] && RiText.instances[i].draw();
4126 }
4127
4128 }
4129
4130 RiText.defaultColor = function(r, g, b, a) {
4131
4132 if (arguments.length) {
4133 RiText.defaults.color = parseColor.apply(this,arguments);
4134 }
4135 return RiText.defaults.color;
4136 }
4137
4138 // PUBLIC statics (TODO: clean up) ///////////////////////////////////////////
4139
4140 RiText.NON_BREAKING_SPACE = "<sp>";
4141 RiText.LINE_BREAK = "<br>";
4142 RiText.PARAGRAPH = "<p>";
4143
4144 RiText.instances = [];
4145
4146 RiText.LEFT = 37; RiText.UP = 38; RiText.RIGHT = 39; RiText.DOWN = 40, RiText.CENTER = 3;
4147
4148 // ==== RiTaEvent ============
4149
4150 RiText.UNKNOWN = -1; RiText.TEXT_ENTERED = 1; RiText.BEHAVIOR_COMPLETED = 2; RiText.TIMER_TICK = 3;
4151
4152 // ==== TextBehavior ============
4153
4154 RiText.MOVE_TO = 1; RiText.FADE_COLOR = 2; RiText.FADE_IN = 3; RiText.FADE_OUT = 4; RiText.FADE_TO_TEXT = 5;
4155 RiText.TIMER = 6; RiText.SCALE_TO = 7; RiText.LERP = 8;
4156
4157 // ==== Animation types ============
4158
4159 RiText.LINEAR = Easing.Linear.None;
4160
4161 RiText.EASE_IN = Easing.Exponential.In;
4162 RiText.EASE_OUT = Easing.Exponential.Out;
4163 RiText.EASE_IN_OUT = Easing.Exponential.InOut;
4164
4165 RiText.EASE_IN_EXPO = Easing.Exponential.In;
4166 RiText.EASE_OUT_EXPO = Easing.Exponential.Out;
4167 RiText.EASE_IN_OUT_EXPO = Easing.Exponential.InOut;
4168
4169 RiText.EASE_IN_SINE = Easing.Sinusoidal.In;
4170 RiText.EASE_OUT_SINE = Easing.Sinusoidal.Out;
4171 RiText.EASE_IN_OUT_SINE = Easing.Sinusoidal.InOut;
4172
4173 RiText.EASE_IN_CUBIC = Easing.Cubic.In;
4174 RiText.EASE_OUT_CUBIC = Easing.Cubic.Out;
4175 RiText.EASE_IN_OUT_CUBIC = Easing.Cubic.InOut;
4176
4177 RiText.EASE_IN_QUARTIC = Easing.Quartic.In;
4178 RiText.EASE_OUT_QUARTIC = Easing.Quartic.Out;
4179 RiText.EASE_IN_OUT_QUARTIC = Easing.Quartic.InOut;
4180
4181 RiText.EASE_IN_QUINTIC = Easing.Quintic.In;
4182 RiText.EASE_OUT_QUINTIC = Easing.Circular.Out;
4183 RiText.EASE_IN_OUT_QUINTIC = Easing.Circular.InOut;
4184
4185 RiText.BACK_IN = Easing.Back.In;
4186 RiText.BACK_OUT = Easing.Back.Out;
4187 RiText.BACK_IN_OUT = Easing.Back.InOut;
4188
4189 RiText.BOUNCE_IN = Easing.Bounce.In;
4190 RiText.BOUNCE_OUT = Easing.Bounce.Out;
4191 RiText.BOUNCE_IN_OUT = Easing.Bounce.InOut;
4192
4193 RiText.CIRCULAR_IN = Easing.Circular.In;
4194 RiText.CIRCULAR_OUT = Easing.Circular.Out;
4195 RiText.CIRCULAR_IN_OUT = Easing.Circular.InOut;
4196
4197 RiText.ELASTIC_IN = Easing.Elastic.In;
4198 RiText.ELASTIC_OUT = Easing.Elastic.Out;
4199 RiText.ELASTIC_IN_OUT = Easing.Elastic.InOut;
4200
4201 /**
4202 * A set of static defaults to be shared by RiText objects
4203 * Can be modified directly or through API methods.
4204 *
4205 * @example
4206 * RiText.defaultAlignment(RiText.RIGHT);
4207 * RiText.defaultFontSize(20);
4208 *
4209 * @example
4210 * RiText.defaults.alignment = RiText.RIGHT;
4211 * RiText.defaults.fontSize = 20;
4212
4213 * @property {object} defaults
4214 */
4215 RiText.defaults = {
4216
4217 color : { r : 0, g : 0, b : 0, a : 255 }, scaleX:1, scaleY:1, scaleZ:1,
4218 alignment : RiText.LEFT, motionType : RiText.LINEAR, rotateZ:0, font:null,
4219 paragraphLeading : 0, paragraphIndent: ' ', indentFirstParagraph: false,
4220 fontFamily: 'Times New Roman', fontSize: 14, fontLeading : 16, leadingFactor : 1.1,
4221 boundingBoxStroke : null, boundingBoxFill: null, boundingBoxVisible : false
4222 }
4223
4224 RiText.prototype = {
4225
4226 /**
4227 * @private
4228 * @param text
4229 * @param x
4230 * @param y
4231 * @param font
4232 * @returns {RiText}
4233 */
4234 initialize : function(text, x, y, font) {
4235
4236 if (!RiText.renderer)
4237 err("No graphics context, RiText unavailable");
4238
4239 if (arguments.length) {
4240
4241 Type.is(text, O) && typeof text.text == F && (text = text.text());
4242 }
4243 else {
4244
4245 text = E;
4246 }
4247
4248 Type.ok(text, S);
4249
4250 this._color = {
4251 r : RiText.defaults.color.r,
4252 g : RiText.defaults.color.g,
4253 b : RiText.defaults.color.b,
4254 a : RiText.defaults.color.a
4255 };
4256
4257 var bbs = RiText.defaults.boundingBoxStroke;
4258 this._boundingBoxStroke = {
4259 r : (bbs && bbs.r) || this._color.r,
4260 g : (bbs && bbs.g) || this._color.g,
4261 b : (bbs && bbs.b) || this._color.b,
4262 a : (bbs && bbs.a) || this._color.a
4263 };
4264
4265 var bbf = RiText.defaults.boundingBoxFill;
4266 this._boundingBoxFill = {
4267 r : (bbf && bbf.r) || this._color.r,
4268 g : (bbf && bbf.g) || this._color.g,
4269 b : (bbf && bbf.b) || this._color.b,
4270 a : (bbf && bbf.a) || 0
4271 };
4272
4273 this._boundingBoxVisible = RiText.defaults.boundingBoxVisible;
4274 this._motionType = RiText.defaults.motionType;
4275
4276 this._alignment = RiText.defaults.alignment;
4277
4278 this._rotateZ = RiText.defaults.rotateZ;
4279 this._scaleX = RiText.defaults.scaleX;
4280 this._scaleY = RiText.defaults.scaleY;
4281 this._scaleZ = 1;
4282
4283 this._behaviors = [];
4284 this.font(font);
4285 this.text(text);
4286
4287 this.g = RiText.renderer;
4288
4289 //log('RiText) '+this._rs._text +" / "+ this._font.name);
4290
4291 this.x = arguments.length>1 ? x : this.g._width() / 2 - this.textWidth() / 2.0;
4292 this.y = arguments.length>1 ? y : this.g._height() / 2;
4293
4294 RiText.instances.push(this);
4295
4296 return this;
4297 },
4298
4299 /**
4300 * TODO: NEED DOCS
4301 */
4302 draw : function() {
4303 this._update();
4304 this._render();
4305 if (this.fadeToTextCopy)
4306 this.fadeToTextCopy.draw();
4307 },
4308
4309 _update : function() {
4310
4311 var time = Date.now();
4312 this._updateBehaviors(time);
4313
4314 },
4315
4316 // updateMousePosition : function(curElement, event) {
4317 // var offset = calculateOffset(window, event);
4318 // p.mouseX = event.pageX - offset.X;
4319 // p.mouseY = event.pageY - offset.Y
4320 // },
4321
4322 _render : function() {
4323
4324 var g = this.g;
4325
4326 if (!g) err('no-renderer');
4327
4328 g._pushState();
4329
4330 if (this._rs && this._rs.length) {
4331
4332 g._pushState();
4333
4334 // order: scale, center-point-trans, rotate,-center-point-trans,translate?
4335
4336 g._rotate(this._rotateZ);
4337 g._translate(this.x, this.y);
4338 g._scale(this._scaleX, this._scaleY, this._scaleZ);
4339
4340 // Set color
4341 g._fill(this._color.r, this._color.g, this._color.b, this._color.a);
4342
4343 // Set font params
4344 g._textFont(this._font);
4345 g._textAlign(this._alignment);
4346
4347 // Draw text
4348 g._text(this._rs._text, 0, 0);
4349
4350 // And the bounding box
4351 if (this._boundingBoxVisible) {
4352
4353 g._fill(this._boundingBoxFill.r, this._boundingBoxFill.g,
4354 this._boundingBoxFill.b, this._boundingBoxFill.a);
4355
4356 g._stroke(this._boundingBoxStroke.r, this._boundingBoxStroke.g,
4357 this._boundingBoxStroke.b, this._boundingBoxStroke.a);
4358
4359 var bb = g._getBoundingBox(this);
4360
4361 // shift bounds based on alignment
4362 switch(this._alignment) {
4363
4364 case RiText.RIGHT:
4365 g._translate(-bb.width,0);
4366 break;
4367 case RiText.CENTER:
4368 g._translate(-bb.width/2,0);
4369 break;
4370 }
4371 g._rect(bb.x, bb.y, bb.width, -bb.height);
4372 }
4373
4374 g._popState();
4375 }
4376
4377 return this;
4378 },
4379
4380 ///////////////////////////////// Text Behaviors ////////////////////////////////////
4381
4382 /**
4383 * Sets/gets the animation <code>motionType</code> for this RiText
4384 * according to one of the following functions: <br>
4385 * <ul>
4386 * <li>RiText.LINEAR
4387 * <li>
4388 * <li>RiText.EASE_IN
4389 * <li>RiText.EASE_OUT
4390 * <li>RiText.EASE_IN_OUT
4391 * <li>
4392 * <li>RiText.EASE_IN_EXPO
4393 * <li>RiText.EASE_OUT_EXPO
4394 * <li>RiText.EASE_IN_OUT_EXPO
4395 * <li>
4396 * <li>RiText.EASE_IN_SINE
4397 * <li>RiText.EASE_OUT_SINE
4398 * <li>RiText.EASE_IN_OUT_SINE
4399 * <li>
4400 * <li>RiText.EASE_IN_CUBIC
4401 * <li>RiText.EASE_OUT_CUBIC
4402 * <li>RiText.EASE_IN_OUT_CUBIC
4403 * <li>
4404 * <li>RiText.EASE_IN_QUARTIC
4405 * <li>RiText.EASE_OUT_QUARTIC
4406 * <li>RiText.EASE_IN_OUT_QUARTIC
4407 * <li>
4408 * <li>RiText.EASE_IN_QUINTIC
4409 * <li>RiText.EASE_OUT_QUINTIC
4410 * <li>RiText.EASE_IN_OUT_QUINTIC
4411 * <li>
4412 * <li>RiText.BACK_IN
4413 * <li>RiText.BACK_OUT
4414 * <li>RiText.BACK_IN_OUT
4415 * <li>
4416 * <li>RiText.BOUNCE_IN
4417 * <li>RiText.BOUNCE_OUT
4418 * <li>RiText.BOUNCE_IN_OUT
4419 * <li>
4420 * <li>RiText.CIRCULAR_IN
4421 * <li>RiText.CIRCULAR_OUT
4422 * <li>RiText.CIRCULAR_IN_OUT
4423 * <li>
4424 * <li>RiText.ELASTIC_IN
4425 * <li>RiText.ELASTIC_OUT
4426 * <li>RiText.ELASTIC_IN_OUT
4427 * </ul>
4428 *
4429 * @param {number} motionType
4430 * @returns {number} motionType
4431 */
4432 motionType : function (motionType) {
4433 if (arguments.length) {
4434 this._motionType = motionType;
4435 return this;
4436 }
4437 return this._motionType;
4438 },
4439
4440 /**
4441 * Fades in current text over <code>seconds</code> starting at
4442 * <code>startTime</code>. Interpolates from the current color {r,g,b,a}
4443 * to {r,g,b,255}.
4444 *
4445 * @param {number} seconds start Time
4446 * time in future to start
4447 * @param {number} delay seconds
4448 * time for fade
4449 * @param {function} callback
4450 *
4451 * @returns {number} the unique id for this behavior
4452 */
4453 fadeIn : function(seconds, delay, callback) {
4454
4455 return this.colorTo([this._color.r, this._color.g, this._color.b, 255],
4456 seconds, delay, null, 'fadeIn', false);
4457 },
4458
4459 /**
4460 * Fades out current text over <code>seconds</code> starting at
4461 * <code>startTime</code>. Interpolates from the current color {r,g,b,a}
4462 * to {r,g,b,0}.
4463 *
4464 * @param {number} seconds
4465 * time for fade
4466 * @param {number} delay
4467 * (optional, default=0), # of seconds in the future that the fade will start
4468 *
4469 * @param {function} callback the callback to be invoked when the behavior has completed (optional: default=onRiTaEvent(e)
4470 *
4471 * @param {boolean} destroyOnComplete
4472 * (optional, default=false), destroys the object when the behavior completes
4473 * @returns {number} the unique id for this behavior
4474 */
4475 fadeOut : function(seconds, delay, callback, destroyOnComplete) {
4476
4477 destroyOnComplete = destroyOnComplete || false;
4478 return this.colorTo([this._color.r, this._color.g, this._color.b, 0],
4479 seconds, delay, null, 'fadeOut', destroyOnComplete);
4480 },
4481
4482 // DH: omitting last 2 args from docs as they are private
4483 /**
4484 * Transitions to 'color' (rgba) over 'seconds' starting at 'delay' seconds in the future
4485 *
4486 * @param {array} colors (length 1-4) r,g,b,a (0-255)
4487 * @param {number} seconds delay
4488 * (optional, default=0), # of seconds in the future that the fade will start
4489 * @param {number} delay seconds
4490 * time for fade
4491 * @param {function} callback the callback to be invoked when the behavior has completed
4492 * (optional: default=onRiTaEvent(e))
4493 * @returns {number} the unique id for this behavior
4494 */
4495 colorTo : function(colors, seconds, delay, callback, type, destroyOnComplete) {
4496
4497 if (!Type.is(colors,A)) err('arg#1 to colorTo() must be an array');
4498
4499 //log(colors[0], g: colors[1], b: colors[2], a: colors[3], seconds);
4500
4501 delay = delay || 0;
4502 seconds = seconds || 1.0;
4503 type = type || 'colorTo';
4504 colors = parseColor.apply(this, colors);
4505
4506 var rt = this, id = setTimeout(function() {
4507
4508 new TextBehavior(rt, rt._color)
4509 .to( { r: colors.r, g: colors.g, b: colors.b, a: colors.a }, seconds*1000)
4510 .easing(rt._motionType)
4511 .onUpdate( function () {
4512 rt._color.r = this.r;
4513 rt._color.g = this.g;
4514 rt._color.b = this.b;
4515 rt._color.a = this.a
4516 })
4517 //.delay(delay)
4518 .onComplete(
4519 function () {
4520 RiTaEvent(rt, type+'Complete')._fire(callback);
4521 if (destroyOnComplete) RiText.dispose(rt);
4522 })
4523 .start();
4524
4525 }, delay*1000);
4526
4527 return id;
4528 },
4529
4530 /**
4531 * Scales to 'theScale' over 'seconds' starting at 'delay' seconds in the future
4532 *
4533 * @param {number} theScale delay
4534 * (optional, default=0), # of seconds in the future that the fade will start
4535 * @param {number} seconds
4536 * time for fade
4537 * @param {number} delay seconds
4538 * time for fade
4539 * @param {function} callback the callback to be invoked when the behavior has completed (optional: default=onRiTaEvent(e)
4540 *
4541 * @returns {number} the unique id for this behavior
4542 */
4543 scaleTo : function(theScale, seconds, delay, callback) {
4544
4545 var rt = this;
4546 delay = delay || 0;
4547 seconds = seconds || 1.0;
4548
4549 var id = setTimeout(function() {
4550
4551 var tb = new TextBehavior(rt)
4552 .to( { _scaleX: theScale, _scaleY: theScale }, seconds*1000)
4553 .easing(rt._motionType)
4554 .onUpdate( function () {
4555 rt._scaleX = this._scaleX;
4556 rt._scaleY = this._scaleY;
4557 })
4558 //.delay(delay*1000)
4559 .onComplete(
4560 function () {
4561 RiTaEvent(rt, 'scaleToComplete')._fire(callback);
4562 });
4563
4564 tb.start();
4565
4566 }, delay*1000);
4567
4568 return id;
4569 },
4570
4571 /**
4572 * Rotates to 'radians' over 'seconds' starting at 'delay' seconds in the future
4573 *
4574 * @param {number} angleInRadians
4575 * @param {number} delay
4576 * (optional, default=0), # of seconds in the future that the fade will start
4577 * @param {number} seconds
4578 * time for fade
4579 * @param {function} callback the callback to be invoked when the behavior has completed (optional: default=onRiTaEvent(e)
4580 *
4581 * @returns {number} the unique id for this behavior
4582 */
4583 rotateTo : function(angleInRadians, seconds, delay, callback) {
4584
4585 var rt = this;
4586 delay = delay || 0;
4587 seconds = seconds || 1.0;
4588
4589 var id = setTimeout(function() {
4590
4591 var tb = new TextBehavior(rt)
4592 .to( { _rotateZ: angleInRadians }, seconds*1000)
4593 .easing(rt._motionType)
4594 .onUpdate( function () {
4595 rt._rotateZ = this._rotateZ;
4596 })
4597 //.delay(delay*1000)
4598 .onComplete(
4599 function () {
4600 RiTaEvent(rt, 'rotateToComplete')._fire(callback);
4601 });
4602
4603 tb.start();
4604
4605 }, delay*1000);
4606
4607 return id;
4608 },
4609
4610 /**
4611 * Fades out the current text and fades in the <code>newText</code> over
4612 * <code>seconds</code> starting at 'startTime' seconds in the future
4613 *
4614 * @param {string} newText
4615 * to be faded in
4616 * @param {number} seconds
4617 * time for fade
4618 * @param {number} endAlpha
4619 * (optional, default=255), the alpha to end on
4620 * @param {function} callback the callback to be invoked when the behavior has completed (optional: default=onRiTaEvent(e)
4621 *
4622 * @returns {number} - the unique id for this behavior
4623 */
4624 textTo: function(newText, seconds, endAlpha, callback) {
4625
4626 // grab the alphas if needed
4627 var c = this._color, startAlpha = 0, endAlpha = endAlpha || 255; // this._color.a
4628
4629 if (this.fadeToTextCopy)
4630 {
4631 startAlpha = this.fadeToTextCopy.alpha();
4632 RiText.dispose(this.fadeToTextCopy); // stop any currents
4633 }
4634
4635 // use the copy to fade out
4636 this.fadeToTextCopy = this.clone().fadeOut(seconds, 0, true);
4637 RiText.dispose(this.fadeToTextCopy.fadeToTextCopy); // avoid turtles
4638
4639 // and use 'this' to fade in
4640 this.text(newText).alpha(startAlpha);
4641
4642 return this.colorTo([c.r, c.g, c.b, endAlpha], seconds * .95, 0, 'textTo');
4643 },
4644
4645 /**
4646 * Move to new x,y position over 'seconds'
4647 * <p>
4648 * Note: uses the current <code>motionType</code> for this object, starting at 'delay' seconds in the future
4649 *
4650 * @param {number} newX
4651 * @param {number} newY
4652 * @param {number} seconds
4653 * @param {number} delay
4654 * @param {function} callback the callback to be invoked when the behavior has completed (optional: default=onRiTaEvent(e)
4655 *
4656 * @returns {number} the unique id for this behavior
4657 */
4658 moveTo : function(newX,newY,seconds,delay,callback) {
4659
4660 var rt = this;
4661
4662 delay = delay || 0;
4663 seconds = seconds || 1.0;
4664
4665 var id = setTimeout(function() {
4666
4667 new TextBehavior(rt)
4668 .to( { x: newX, y: newY }, seconds*1000)
4669 .easing(rt._motionType)
4670 .onUpdate( function () {
4671 rt.x = this.x ;
4672 rt.y = this.y ;
4673 })
4674 .delay(delay).onComplete(
4675 function () {
4676 RiTaEvent(rt, 'moveToCompleted')._fire(callback);
4677 })
4678 .start();
4679
4680 }, delay*1000);
4681
4682 return id;
4683 },
4684
4685 ////////////////////////////////////////////////////////////////////////////////////////
4686
4687 analyze : function() {
4688
4689 var words = (this._rs._text.indexOf(SP) ? RiTa.tokenize(this._rs._text) : [this._rs._text]),
4690 lex = RiLexicon._getInstance(), slash = '/', stressyls, raw, delim = '-',
4691 phonemes = E, syllables = E, stresses = E, lts;
4692
4693 this.features = this.features || {};
4694
4695 for (var i = 0, l = words.length; i < l; i++) {
4696
4697 raw = lex._getRawPhones(words[i]);
4698
4699 if (!raw) {
4700
4701 if (!RiTa.SILENT && console)
4702 console.log("[RiTa] Using LTS for '"+words[i]+"'");
4703
4704 lts = lts || LetterToSound();
4705 raw = this._rs.syllabify(lts.getPhones(words[i]));
4706 }
4707
4708 phonemes += raw.replace(/[0-2]/g, E).replace(/ /g, delim) + SP;
4709 syllables += raw.replace(/ /g, slash).replace(/1/g, E) + SP;
4710
4711 stressyls = raw.split(SP);
4712 for (var j = 0; j < stressyls.length; j++) {
4713
4714 if (!stressyls[j].length) continue;
4715
4716 stresses += (stressyls[j].indexOf(RiLexicon.STRESSED) > -1)
4717 ? RiLexicon.STRESSED : RiLexicon.UNSTRESSED;
4718
4719 if (j < stressyls.length-1) stresses += slash;
4720 }
4721 if (!endsWith(stresses, SP)) stresses += SP;
4722 }
4723 this.features.phonemes = phonemes.trim();
4724 this.features.stresses = stresses.trim();
4725 this.features.syllables = syllables.trim();
4726
4727 //log(this.features);
4728
4729 return this;
4730 },
4731
4732
4733 /**
4734 * Set/gets the text for this RiText
4735 *
4736 * @param {string} txt the new text (optional)
4737 * @returns {object | number} this RiText (for sets) or the current text (for gets)
4738 */
4739 text : function(txt) {
4740
4741 if (arguments.length == 1) {
4742
4743 var theType = Type.get(txt);
4744
4745 if (theType == N) {
4746 txt = String.fromCharCode(txt);
4747 }
4748 else if (theType == O && typeof txt.text == F) {
4749 txt = txt.text();
4750 }
4751 this._rs = (this._rs) ? this._rs.text(txt) : new RiString(txt);
4752
4753 if (!this._rs) err("no rs!! "+txt); // TODO:remove
4754
4755 return this;
4756 }
4757
4758 return this._rs._text;
4759 },
4760
4761 /**
4762 * Searches for a match between a substring (or regular expression) and the contained
4763 * string, and returns the matches
4764 *
4765 * @param {string | object} regex
4766 * @returns {array} strings matches or empty array if none are found
4767 */
4768 match : function(regex) {
4769
4770 return this._rs.match(regex);
4771
4772 },
4773
4774 /**
4775 * Returns the character at the given 'index', or empty string if none is found
4776 *
4777 * @param {number} index index of the character
4778 * @returns {string} the character
4779 */
4780 charAt : function(index) {
4781
4782 return this._rs.charAt(index);
4783
4784 },
4785
4786
4787 /**
4788 * Concatenates the text from another RiText at the end of this one
4789 *
4790 * @returns {object} this RiText
4791 */
4792 concat : function(riText) {
4793
4794 return this._rs._text.concat(riText.text());
4795
4796 },
4797
4798 /**
4799 * Returns true if and only if this string contains the specified sequence of char values.
4800 *
4801 * @param {string} text text to be checked
4802 * @returns {boolean}
4803 */
4804 containsWord : function(text) {
4805
4806 return this._rs.indexOf(text) > -1;
4807
4808 },
4809
4810 /**
4811 * Tests if this string ends with the specified suffix.
4812 *
4813 * @param {string} substr string the suffix.
4814 *
4815 * @returns {boolean} true if the character sequence represented by the argument is a suffix of
4816 * the character sequence represented by this object; false otherwise. *
4817 */
4818 endsWith : function(substr) {
4819
4820 return endsWith(this._rs._text, substr);
4821
4822 },
4823
4824 /**
4825 * Compares this RiText to the specified object. The result is true if and only if the
4826 * argument is not null and is a RiText object that represents the same sequence of
4827 * characters as this object.
4828 *
4829 * @param {object} RiText RiText object to compare this RiText against.
4830 * @returns {boolean} true if the RiText are equal; false otherwise.
4831 */
4832 equals : function(RiText) {
4833
4834 return RiText._rs._text === this._rs._text;
4835
4836 },
4837
4838 /**
4839 * Compares this RiText to another RiText, ignoring case considerations.
4840 *
4841 * @param {string | object} str String or RiText object to compare this RiText against
4842 * @returns {boolean} true if the argument is not null and the Strings are equal, ignoring
4843 * case; false otherwise.
4844 */
4845 equalsIgnoreCase : function(str) {
4846
4847 if (typeof str === S) {
4848
4849 return str.toLowerCase() === this._rs._text.toLowerCase();
4850 }
4851 else {
4852
4853 return str.text().toLowerCase() === this._rs._text.toLowerCase();
4854 }
4855
4856 },
4857
4858 /**
4859 * Returns the index within this string of the first occurrence of the specified character.
4860 *
4861 * @param {string} searchstring (Required) or character to search for
4862 * @param {number} start (Optional) The start position in the string to start the search. If omitted,
4863 * the search starts from position 0
4864 * @returns {number} the first index of the matching pattern or -1 if none are found
4865 */
4866 indexOf : function(searchstring, start) {
4867
4868 return this._rs._text.indexOf(searchstring, start);
4869
4870 },
4871
4872 /**
4873 * Inserts 'newWord' at 'wordIdx' and shifts each subsequent word accordingly.
4874 *
4875 * @returns {object} this RiText
4876 */
4877 insertWordAt : function(newWord, wordIdx) {
4878
4879 var words = this._rs.words();
4880 if (newWord && newWord.length && wordIdx >= 0 && wordIdx < words.length) {
4881
4882 // filthy hack to preserve punctuation in 'newWord'
4883 words.splice(wordIdx,0, DeLiM+newWord+DeLiM);
4884
4885
4886 this._rs.text( RiTa.untokenize(words).replace(new RegExp(DeLiM,'g'),E) );
4887 }
4888
4889 return this;
4890
4891 },
4892
4893 /**
4894 * Returns the index within this string of the last occurrence of the specified character.
4895 *
4896 * @param {string} searchstring The string to search for
4897 * @param {number} start (Optional) The start position in the string to start the search. If omitted,
4898 * the search starts from position 0
4899 *
4900 * @returns {number} the last index of the matching pattern or -1 if none are found
4901 */
4902 lastIndexOf : function(searchstring, start) {
4903
4904 return this._rs._text.lastIndexOf(searchstring, start);
4905
4906 },
4907
4908 /**
4909 * Returns the length of this string.
4910 *
4911 * @returns {number} the length
4912 */
4913 length : function() {
4914
4915 return this._rs._text.length;
4916
4917 },
4918
4919
4920 /**
4921 * Returns an array of part-of-speech tags, one per word, using RiTa.tokenize() and RiTa.posTag().
4922 *
4923 * @returns {array} strings of pos, one per word
4924 */
4925 pos : function() {
4926
4927 var words = RiTa.tokenize((this._rs._text)); // was getPlaintext()
4928 var tags = PosTagger.tag(words);
4929
4930 for ( var i = 0, l = tags.length; i < l; i++) {
4931 if (!strOk(tags[i]))
4932 err("RiText: can't parse pos for:" + words[i]);
4933 }
4934
4935 return tags;
4936
4937 },
4938
4939 /**
4940 * Returns the part-of-speech tag for the word at 'index', using RiTa.tokenize() and RiTa.posTag().
4941 *
4942 * @param {number} index the word index
4943 * @returns {string} the pos
4944 */
4945 posAt : function(index) {
4946
4947 var tags = this._rs.pos();
4948
4949 if (isNull(tags) || tags.length == 0 || index < 0 || index >= tags.length)
4950 return E;
4951
4952 return tags[index];
4953
4954 },
4955
4956 /**
4957 * Removes the character at the specified index
4958 *
4959 * @param {number} ind the index
4960 * @returns {object} RiText
4961 */
4962 removeCharAt : function(ind) {
4963
4964 this._rs.removeCharAt(ind);
4965 return this;
4966
4967 },
4968
4969 /**
4970 * Replaces the character at 'idx' with 'replaceWith'. If the specified 'idx' is less than
4971 * zero, or beyond the length of the current text, there will be no effect.
4972 *
4973 * @param {number} idx the character index
4974 * @param {string} replaceWith the replacement
4975 * @returns {object} this RiText
4976 */
4977 replaceCharAt : function(idx, replaceWith) {
4978
4979 if (idx < 0 || idx >= this._rs.length())
4980 return this;
4981
4982 var s = this._rs.text();
4983 var beg = s.substring(0, idx);
4984 var end = s.substring(idx + 1);
4985 var s2 = null;
4986
4987 if (replaceWith)
4988 s2 = beg + replaceWith + end;
4989 else
4990 s2 = beg + end;
4991
4992 return this._rs.text(s2);
4993
4994 },
4995
4996 /**
4997 * Replaces the first instance of 'regex' with 'replaceWith'
4998 *
4999 * @param {string | regex} regex the pattern
5000 * @param {string} replaceWith the replacement
5001 *
5002 * @returns this RiText
5003 */
5004 replaceFirst : function(regex, replaceWith) {
5005
5006 if (replaceWith)
5007 this._rs._text = this._rs._text.replace(regex,replaceWith);
5008 return this;
5009
5010 },
5011
5012 /**
5013 * Replaces the last instance of 'regex' with 'replaceWith'
5014 *
5015 * @param {string | regex} regex the pattern
5016 * @param {string} replaceWith the replacement
5017 *
5018 * @returns this RiText
5019 */
5020 replaceLast : function(regex, replaceWith) {
5021 if (replaceWith) {
5022
5023
5024 if (this._rs._text.lastIndexOf(regex)>=0){//this do not work for regex..
5025 var ind = this._rs._text.lastIndexOf(regex);
5026 var before = this._rs._text.substring(0, ind);
5027 var after = this._rs._text.substring(ind+regex.length);
5028
5029 var finished = before + replaceWith + after;
5030 this._rs._text = finished;
5031
5032 return this;
5033 }
5034 };
5035
5036 },
5037
5038
5039 /**
5040 * Replaces each substring of this string that matches the given regular expression with the
5041 * given replacement.
5042 *
5043 * @param {string | regex } pattern the pattern to be matched
5044 * @param {string} replacement the replacement sequence of char values
5045 * @returns {object} this RiText
5046 */
5047 replaceAll : function(pattern, replacement) {
5048
5049 if (pattern && (replacement || replacement==='')) {
5050 this._rs._text = replaceAll(this._rs._text, pattern, replacement);
5051 }
5052 return this;
5053
5054 },
5055
5056 /**
5057 * Replaces the word at 'wordIdx' with 'newWord'
5058 *
5059 * @param {number} wordIdx the index
5060 * @param {string} newWord the replacement
5061 *
5062 * @returns {object} this RiText
5063 */
5064 replaceWordAt : function(wordIdx, newWord) {
5065
5066 var words = this.words();
5067
5068 if (wordIdx >= 0 && wordIdx < words.length) {
5069
5070 words[wordIdx] = newWord;
5071
5072 this._rs.text(RiTa.untokenize(words));
5073 }
5074
5075 return this;
5076
5077 },
5078
5079 /**
5080 * Extracts a part of a string from this RiText
5081 *
5082 * @param {number} begin (Required) The index where to begin the extraction. First character is at
5083 * index 0
5084 * @param {number} end (Optional) Where to end the extraction. If omitted, slice() selects all
5085 * characters from the begin position to the end of the string
5086 * @returns {object} this RiText
5087 */
5088 slice : function(begin, end) {
5089
5090 var res = this._rs._text.slice(begin, end) || E;
5091 return this._rs.text(res);
5092
5093 },
5094
5095 /**
5096 * Split a RiText into an array of sub-RiText and return the new array.
5097 *
5098 * If an empty string ("") is used as the separator, the string is split between each character.
5099 *
5100 * @param {string} separator (Optional) Specifies the character to use for splitting the string. If
5101 * omitted, the entire string will be returned. If an empty string ("") is used as the separator,
5102 * the string is split between each character.
5103 *
5104 * @param {number} limit (Optional) An integer that specifies the number of splits
5105 *
5106 * @returns {array} RiText
5107 */
5108 split : function(separator, limit) {
5109
5110 var parts = this._rs._text.split(separator, limit);
5111 var rs = [];
5112 for ( var i = 0; i < parts.length; i++) {
5113 if (!isNull(parts[i]))
5114 rs.push(new RiText(parts[i]));
5115 }
5116 return rs;
5117
5118 },
5119
5120 /**
5121 * Tests if this string starts with the specified prefix.
5122 *
5123 * @param {string} substr string the prefix
5124 * @returns {boolean} true if the character sequence represented by the argument is a prefix of
5125 * the character sequence represented by this string; false otherwise. Note also
5126 * that true will be returned if the argument is an empty string or is equal to this
5127 * RiText object as determined by the equals() method.
5128 */
5129 startsWith : function(substr) {
5130
5131 return this._rs.indexOf(substr) == 0;
5132
5133 },
5134
5135 /**
5136 * Extracts the characters from a string, between two specified indices, and sets the
5137 * current text to be that string.
5138 *
5139 * @param {number} from The index where to start the extraction. First character is at
5140 * index 0
5141 * @param {number} to (optional) The index where to stop the extraction. If omitted, it extracts the
5142 * rest of the string
5143 * @returns {object} this RiText
5144 */
5145 substring : function(from, to) {
5146
5147 return this._rs.text(this._rs._text.substring(from, to));
5148
5149 },
5150
5151
5152 /**
5153 * Extracts the characters from this objects contained string, beginning at 'start' and
5154 * continuing through the specified number of characters, and sets the current text to be
5155 * that string. (from Javascript String)
5156 *
5157 * @param {number} start The index where to start the extraction. First character is at
5158 * index 0
5159 * @param {number} length (optional) The index where to stop the extraction. If omitted, it extracts the
5160 * rest of the string
5161 * @returns {object} this RiText
5162 */
5163 substr : function(start, length) {
5164
5165 var res = this._rs._text.substr(start, length);
5166 return this._rs.text(res);
5167
5168 },
5169
5170 /**
5171 * Converts this object to an array of RiText objects, one per character
5172 *
5173 * @returns {array} RiTexts with each letter as its own RiText element
5174 */
5175 toCharArray : function() {
5176 var parts = this._rs._text.split(E);
5177 var rs = [];
5178 for ( var i = 0; i < parts.length; i++) {
5179 if (!isNull(parts[i]))
5180 rs.push(parts[i]);
5181 }
5182 return rs;
5183 },
5184
5185 /**
5186 * Converts all of the characters in this RiText to lower case
5187 *
5188 * @returns {object} this RiText
5189 */
5190 toLowerCase : function() {
5191
5192 return this._rs.text(this._rs._text.toLowerCase());
5193
5194 },
5195
5196 /**
5197 * Converts all of the characters in this RiText to upper case
5198 *
5199 * @returns {object} this RiText
5200 */
5201 toUpperCase : function() {
5202
5203 return this._rs.text(this._rs._text.toUpperCase());
5204
5205 },
5206
5207 /**
5208 * Returns a copy of the string, with leading and trailing whitespace omitted.
5209 *
5210 * @returns {object} this RiText
5211 */
5212 trim : function() {
5213
5214 return this._rs.text(trim(this._rs._text));
5215
5216 },
5217
5218 /**
5219 * Returns the word at 'index', according to RiTa.tokenize()
5220 *
5221 * @param {number} index the word index
5222 * @returns {string} the word
5223 */
5224 wordAt : function(index) {
5225
5226 var words = RiTa.tokenize((this._rs._text));
5227 if (index < 0 || index >= words.length)
5228 return E;
5229 return words[index];
5230
5231 },
5232
5233 /**
5234 * Returns the number of words in the object, according to RiTa.tokenize().
5235 *
5236 * @returns {number} number of words
5237 */
5238 wordCount : function() {
5239
5240 if (!this._rs._text.length) return 0;
5241 return this.words().length;
5242
5243 },
5244
5245 /**
5246 * Returns the array of words in the object, via a call to RiTa.tokenize().
5247 *
5248 * @returns {array} strings, one per word
5249 */
5250 words : function() { //TODO: change to words()
5251
5252 return RiTa.tokenize(this._rs._text);
5253
5254 },
5255
5256
5257 /**
5258 * Returns the distance between the center points of this and another RiText
5259 * @returns {number} the distance
5260 */
5261 distanceTo : function(riText)
5262 {
5263 var p1 = this.center(), p2 = riText.center();
5264 return RiTa.distance( p1.x, p1.y, p2.x, p2.y);
5265 },
5266
5267 /**
5268 * Returns the center point of this RiText as derived from its bounding box
5269 * @returns {object} { x, y }
5270 */
5271 center : function() {
5272
5273 var bb = this.boundingBox();
5274 return { x: bb.x+bb.width/2, y: bb.y - bb.height/2 };
5275 },
5276
5277 /**
5278 * Splits the object into an array of RiTexts, one per word
5279 * tokenized with the supplied regex.
5280 *
5281 * @param {regex | string} to split
5282 * @returns {array} RiTexts
5283 */
5284 splitWords : function(regex) {
5285
5286 regex = regex || ' ';
5287
5288 (typeof regex == S) && (regex = new RegExp(regex));
5289
5290 var l = [];
5291 var txt = this._rs._text;
5292 var words = txt.split(regex);
5293
5294 for ( var i = 0; i < words.length; i++) {
5295 if (words[i].length < 1) continue;
5296 var tmp = this.clone();
5297 tmp.text(words[i]);
5298 var mx = _wordOffsetFor(this, words, i);
5299 tmp.position(mx, this.y);
5300 l.push(tmp);
5301 }
5302
5303 return l;
5304 },
5305
5306 /**
5307 * Splits the object into an array of RiTexts, one per letter.
5308 * @returns {array} RiTexts
5309 */
5310 splitLetters : function() {
5311
5312 var l = [];
5313 var chars = [];
5314 var txt = this.text();
5315 var len = txt.length;
5316 for (var t = 0; t < len; t++) {
5317 chars[t] = txt.charAt(t);
5318 }
5319
5320 for ( var i = 0; i < chars.length; i++) {
5321 if (chars[i] == ' ') continue;
5322 var tmp = this.clone();
5323 tmp.text(chars[i]);
5324 var mx = this.charOffset(i);
5325 tmp.position(mx, this.y);
5326
5327 l.push(tmp);
5328 }
5329
5330 return l;
5331 },
5332
5333 /**
5334 * Returns true if the bounding box for this RiText contains the point mx/my
5335 *
5336 * @param {number} mx
5337 * @param {number} my
5338 * @returns {boolean}
5339 */
5340 contains : function(mx, my) {
5341
5342 var bb = this.g._getBoundingBox(this);
5343
5344 // // TODO: need to test this with point
5345 // if (!my && Type.get(mx.x) == 'Number' && Type.get(mx.y) == 'Number') {
5346 // mx = mx.x;
5347 // my = mx.y;
5348 // }
5349 //
5350 bb.x += this.x;
5351 bb.y += this.y;
5352
5353 return (!(mx<bb.x || mx > bb.x+bb.width || my > bb.y || my < bb.y-bb.height));
5354 },
5355
5356 /**
5357 * Creates and returns a new (copy) of this RiText
5358 * @returns {object} RiText
5359 */
5360 clone : function() {
5361
5362 var c = new RiText(this.text(), this.x, this.y, this._font);
5363 c.color(this._color.r, this._color.g, this._color.b, this._color.a);
5364
5365 for (prop in this) {
5366 if (typeof this[prop] == F || typeof this[prop] == O)
5367 continue;
5368 c[prop] = this[prop];
5369 }
5370
5371 return c;
5372 },
5373
5374 /**
5375 * Set/gets the alignment for this RiText (RiText.LEFT || RiText.CENTER || RiText.RIGHT)
5376 *
5377 * @param {object} align (optional) the alignment
5378 * @returns {object} this RiText (set) or the current font (get)
5379 */
5380 align : function(align) {
5381 if (arguments.length) {
5382 this._alignment = align;
5383 return this;
5384 }
5385 return this._alignment;
5386 },
5387
5388
5389 /**
5390 * Set/gets the font for this RiText
5391 *
5392 * @param {object} font (optional) containing the font data OR
5393 * @param {string} font containing the font name AND
5394 * @param {number} size (optional) containing the font size
5395 * @returns {object} this RiText (set) or the current font (get)
5396 */
5397 font : function(font,size) {
5398
5399 var a = arguments;
5400
5401 if (a.length == 1) {
5402
5403 this._font = font || _getDefaultFont();
5404 this._font.size = this._font.size || RiText.defaults.fontSize;
5405 this._font.leading = this._font.leading || this._font.size * RiText.defaults.leadingFactor;
5406 return this;
5407 }
5408 else if (a.length == 2) {
5409
5410 return this.font( RiText.createFont(a[0], a[1]) );
5411 }
5412
5413 return this._font;
5414 },
5415
5416
5417 /**
5418 * Set/gets the boundingbox visibility for this RiText
5419 *
5420 * @param {boolean} trueOrFalse (optional) true or false
5421 * @returns {object | boolean}this RiText (set) or the current boolean value (get)
5422 */
5423 showBoundingBox : function(trueOrFalse) {
5424 if (arguments.length == 1) {
5425 this._boundingBoxVisible = trueOrFalse;
5426 return this;
5427 }
5428 return this._boundingBoxVisible;
5429 },
5430
5431 /**
5432 * Set/gets the color for this RiText
5433 *
5434 * @param {number | array} cr takes 1-4 number values for rgba, or an array of size 1-4
5435 * @param {number} cg
5436 * @param {number} cb
5437 * @param {number} ca
5438 *
5439 * @returns {object} either this RiText (for sets) or the current color object (for gets)
5440 */
5441 color : function(cr, cg, cb, ca) {
5442
5443 if (arguments.length == 0)
5444 return this._color;
5445 this._color = parseColor.apply(this, arguments);
5446 return this;
5447 },
5448
5449 /**
5450 * Returns false if the alpha value of this object is <= 0, else true
5451 * @returns {boolean}
5452 */
5453 isVisible : function() {
5454
5455 if (arguments.length)
5456 err('visible() takes no arguments');
5457
5458 return this._color.a > 0;
5459 },
5460
5461 /**
5462 * Set/gets the alpha (transparency) for this RiText
5463 *
5464 * @param {number} a (optional) input (0-255)
5465 * @returns {object | number} either this RiText (for set) or the current alpha value (for get)
5466 */
5467 alpha : function(a) {
5468 if (arguments.length==1) {
5469 this._color.a = a;
5470 return this;
5471 }
5472 else return this._color.a;
5473 },
5474
5475 /**
5476 * Set/gets the position for this RiText
5477 *
5478 * @param {number} x (optional) X coordinate
5479 * @param {number} y (optional) Y coordinate
5480 *
5481 * @returns {object} either this RiText (for sets) or object {x, y} (for gets)
5482 */
5483 position : function(x,y) {
5484
5485 if (!arguments.length)
5486 return { x: this.x, y: this.y };
5487 this.x = x;
5488 this.y = y;
5489 return this;
5490 },
5491
5492 /**
5493 * Sets/gets the 2d rotation for this RiText
5494 *
5495 * @param {number} rotate degree to rotate
5496 *
5497 * @returns {object | number} either this RiText (for sets) or the current degree to rotation (for gets)
5498 */
5499 rotate : function(rotate) {
5500
5501 if (!arguments.length)
5502 return this._rotateZ
5503 this._rotateZ = rotate;
5504 return this;
5505 },
5506
5507 /**
5508 * Sets/gets the scale factor for this RiText (takes 0-2 arguments)
5509 *
5510 * @param {number} theScaleX the ScaleX ratio
5511 * @param {number} theScaleY (optional) the ScaleY ratio
5512 *
5513 @returns {object | number} either this RiText (for sets) or the current degree of rotation (for gets)
5514 */
5515 scale : function(theScaleX, theScaleY) {
5516
5517 if (!arguments.length) return { x:this._scaleX, y:this._scaleY };
5518
5519 if (arguments.length == 1) theScaleY = theScaleX;
5520
5521 this._scaleX = theScaleX;
5522 this._scaleY = theScaleY;
5523
5524 return this;
5525 },
5526
5527 /**
5528 * Returns the pixel x-offset for the character at 'charIdx'
5529 *
5530 * @param {number} charIdx
5531 * @returns {number} the pixel x-offset
5532 */
5533 charOffset : function(charIdx) {
5534
5535 var theX = this.x;
5536
5537 if (charIdx > 0) {
5538
5539 var txt = this.text();
5540
5541 var len = txt.length;
5542 if (charIdx > len) // -1?
5543 charIdx = len;
5544
5545 var sub = txt.substring(0, charIdx);
5546 theX = this.x + this.g._textWidth(this._font, sub);
5547 }
5548
5549 return theX;
5550 },
5551
5552 /**
5553 * Returns the pixel x-offset for the word at 'wordIdx'
5554 * @param {number} wordIdx
5555 * @returns {number} the pixel x-offset
5556 */
5557 wordOffset : function(wordIdx) {
5558
5559 var words = this.text().split(' ');
5560 return _wordOffsetFor(this, words, wordIdx);
5561 },
5562
5563 /**
5564 * Returns the bounding box for the current text.
5565 * @returns {object} x,y,width,height
5566 */
5567 boundingBox : function() {
5568
5569 var bb = this.g._getBoundingBox(this);
5570 // if (0 && transformed) { // tmp: do with matrix
5571 // bb.x += this.x;
5572 // bb.y += this.y;
5573 // bb.width *= this._scaleX;
5574 // bb.height *= this._scaleY;
5575 // }
5576 // * @param {boolean} (optional, default=false)
5577 // * if true, bounding box is first transformed (rotate,translate,scale)
5578 // * according to the RiTexts current matrix
5579 return bb;
5580 },
5581
5582 /**
5583 * Returns the current width of the text (derived from the bounding box)
5584 * @returns {number} the width of the text
5585 */
5586 //@param {boolean} (optional, default=false) if true, width is first scaled
5587 textWidth : function() {
5588
5589 return this.g._textWidth(this._font,this._rs._text);
5590 },
5591
5592 /**
5593 * Returns the current height of the text (derived from the bounding box)
5594 * @returns {number} the current height of the text
5595 */
5596 // * @param {boolean} (optional, default=false) if true, height is first scaled
5597 textHeight : function() {
5598
5599 return this.g._textHeight(this);
5600 },
5601
5602 /**
5603 * Sets/gets the size of the current font. Note: this method only
5604 * effects only scaleX/Y, not the font's internal properties
5605 *
5606 * @param {number} sz (optional) font size
5607 *
5608 * @returns {object | number} either this RiText (for set) or the current font size (for get)
5609 */
5610 fontSize : function(sz) {
5611
5612 // TODO: what to do if scaleX and scaleY are different
5613
5614 return (arguments.length) ? this.scale( sz / this._font.size)
5615 : (this._font.size * this._scaleX);
5616 },
5617
5618 /**
5619 * Returns the ascent of the current font
5620 * @returns {number} the ascent of the current font
5621 */
5622 textAscent : function() {
5623
5624 return this.g._textAscent(this);
5625 },
5626
5627 /**
5628 * Returns the descent of the current font
5629 * @returns {number} the descent of the current font
5630 */
5631 textDescent : function() {
5632
5633 return this.g._textDescent(this);
5634 },
5635
5636
5637 /*
5638 * Returns all existing text behaviors for the object
5639 * @returns {array}
5640 behaviors: function () {
5641
5642 return this._behaviors;
5643
5644 },*/
5645
5646
5647 /**
5648 * Adds a new text behaviors to the object
5649 * @returns {array}
5650 */
5651 _addBehavior: function ( behavior ) {
5652
5653 this._behaviors.push( behavior );
5654
5655 },
5656
5657 /**
5658 * Removes the text behaviors for the object
5659 * @param {string} the behaviors
5660 */
5661 _removeBehavior: function ( behavior ) {
5662
5663 var i = this._behaviors.indexOf(behavior);
5664
5665 if ( i !== -1 ) {
5666
5667 this._behaviors.splice( i, 1 );
5668
5669 }
5670
5671 },
5672
5673 /**
5674 * Removes all text behaviors for the object
5675 * @returns {array}
5676 */
5677 _removeBehaviors: function () {
5678
5679 this._behaviors = [];
5680
5681 },
5682
5683 // TODO: make PRIVATE
5684 /**
5685 * Updates existing text behaviors for the object
5686 * @param {string} the behaviors
5687 */
5688 _updateBehaviors: function (time) {
5689
5690 var i = 0;
5691 var num = this._behaviors.length;
5692 var time = time || Date.now();
5693
5694 while ( i < num ) {
5695
5696 if (this._behaviors[ i ].update(time) ) {
5697 i++;
5698
5699 } else {
5700
5701 this._behaviors.splice(i, 1);
5702 num --;
5703
5704 }
5705 }
5706 },
5707
5708 /** @private */
5709 toString : function() {
5710
5711 var s = (this._rs && this._rs._text) || 'undefined';
5712 return '['+Math.round(this.x)+","+Math.round(this.y)+",'"+s+"']";
5713 }
5714 }
5715
5716 // ////////////////////////////////////////////////////////////
5717 // RiTa object (singleton)
5718 // ////////////////////////////////////////////////////////////
5719
5720 /**
5721 * @namespace A collection of static variables and functions for the RiTa library
5722 */
5723 RiTa = {
5724
5725 // RiTa constants =================================
5726
5727 /** The current version of the RiTa tools */
5728
5729 VERSION : '0.15',
5730
5731 /**
5732 * a=alpha
5733 * b=beta
5734 * @private
5735 */
5736 PHASE : 'a',
5737
5738 /** @private */
5739 P5_COMPATIBLE : true,
5740
5741 /** For tokenization, Can't -> Can not, etc. */
5742 SPLIT_CONTRACTIONS : false,
5743
5744 // For Conjugator =================================
5745
5746 //TODO: add comments
5747
5748 PHONEMES : 'phonemes',
5749
5750 STRESSES : 'stresses',
5751
5752 SYLLABLES : 'syllables',
5753
5754 FIRST_PERSON : 1,
5755
5756 SECOND_PERSON : 2,
5757
5758 THIRD_PERSON : 3,
5759
5760 PAST_TENSE : 4,
5761
5762 PRESENT_TENSE : 5,
5763
5764 FUTURE_TENSE : 6,
5765
5766 SINGULAR : 7,
5767
5768 PLURAL : 8,
5769
5770 NORMAL : 9,
5771
5772 ABBREVIATIONS : [ "Adm." ,"Capt." ,"Cmdr." ,"Col." ,"Dr." ,"Gen." ,"Gov." ,"Lt." ,"Maj." ,"Messrs." ,"Mr.","Mrs." ,"Ms." ,"Prof." ,"Rep." ,"Reps." ,"Rev." ,"Sen." ,"Sens." ,"Sgt." ,"Sr." ,"St.","a.k.a." ,"c.f." ,"i.e." ,"e.g." ,"vs." ,"v.", "Jan." ,"Feb." ,"Mar." ,"Apr." ,"Mar." ,"Jun." ,"Jul." ,"Aug." ,"Sept." ,"Oct." ,"Nov." ,"Dec." ],
5773
5774 /** The infinitive verb form - 'to eat an apple' */
5775 INFINITIVE : 1,
5776
5777 /** Gerund form of a verb - 'eating an apple' */
5778 GERUND : 2,
5779
5780 /** The imperative verb form - 'eat an apple!' */
5781 IMPERATIVE : 3,
5782
5783 /** Bare infinitive verb form - 'eat an apple' */
5784 BARE_INFINITIVE : 4,
5785
5786 /** The subjunctive verb form */
5787 SUBJUNCTIVE : 5,
5788
5789 /** Set to true to disable all console output */
5790 SILENT : false,
5791
5792 // Start Methods =================================
5793
5794 /**
5795 * Joins array of word, similar to words.join(" "), but attempts to preserve punctuation position
5796 * unless the 'adjustPunctuationSpacing' flag is set to false
5797 *
5798 * @param {array} arr the array to join
5799 * @param {string} delim the characters to place between each array element
5800 * @param {boolean} adjustPunctuationSpacing (optional, default=true)
5801 *
5802 * @returns {string} the joined array as string
5803 */
5804 untokenize: function(arr, delim, adjustPunctuationSpacing) {
5805
5806 delim = delim || SP;
5807 adjustPunctuationSpacing = adjustPunctuationSpacing || 1;
5808
5809 if (adjustPunctuationSpacing) {
5810 var newStr = arr[0] || E;
5811 for ( var i = 1; i < arr.length; i++) {
5812 if (arr[i]) {
5813 if (!RiTa.isPunctuation(arr[i]))
5814 newStr += delim;
5815 newStr += arr[i];
5816 }
5817 }
5818 return newStr;
5819 }
5820
5821 return arr.join(delim);
5822 },
5823
5824 /**
5825 * Returns a random number between min(default=0) and max(default=1)
5826 * @returns {number}
5827 */
5828 random: function() {
5829
5830 var currentRandom = Math.random();
5831 if (arguments.length === 0) return currentRandom;
5832 if (arguments.length === 1) return currentRandom * arguments[0];
5833 var aMin = arguments[0], aMax = arguments[1];
5834
5835 return currentRandom * (aMax - aMin) + aMin;
5836
5837 },
5838
5839 /**
5840 * Convenience method to get the distance between 2 points
5841 * @param {number} x1
5842 * @param {number} y1
5843 * @param {number} x2
5844 * @param {number} y2
5845 *
5846 * @returns {number}
5847 */
5848 distance: function(x1,y1,x2,y2) {
5849
5850 var dx = x1 - x2, dy = y1 - y2;
5851 return Math.sqrt(dx * dx + dy * dy);
5852
5853 },
5854
5855
5856 /**
5857 * Starts a timer that calls 'onRiTaEvent', or the specified callback,
5858 * every 'period' seconds
5859 *
5860 * @param {number} period
5861 * @param {function} callback called every 'period' seconds
5862 * @returns {number} the unique id for the timer
5863 */
5864 timer: function(period, callback) {
5865
5866 var id = setInterval(function(){
5867
5868 RiTaEvent(RiTa, 'tick')._fire(callback);
5869
5870 }, period * 1000);
5871
5872 return id;
5873 },
5874
5875 /**
5876 * Returns true if 'tag' is a valid PENN part-of-speech tag (e.g. cd, fw, jj, ls, nn, sym, vbg, wp)
5877 * @param {string} tag the PENN part-of-speech tag
5878 * @returns {boolean} true if the tag a valid PENN part-of-speech tag
5879 */
5880 _isPosTag : function(tag) {
5881 return PosTagger.isTag(tag);
5882
5883 },
5884
5885 // TODO: example
5886 /**
5887 * Tags the word (as usual) with a part-of-speech from the Penn tagset,
5888 * then returns the corresponding part-of-speech for WordNet from the
5889 * set { 'n', 'v', 'a', 'r' } as a string.
5890 *
5891 * @param {string | array} words the text to be tagged
5892 * @returns {string | array} the corresponding part-of-speech for WordNet
5893 */
5894 _tagForWordNet : function(words) {
5895
5896 var posArr = RiTa.getPosTags(words);
5897 //var posArr = posTag(words);
5898 if (!isNull(words) && posArr.length) {
5899 for ( var i = 0; i < posArr.length; i++) {
5900 var pos = posArr[i];
5901 if (PosTagger.isNoun(pos)) posArr[i] = "n";
5902 if (PosTagger.isVerb(pos)) posArr[i] = "v";
5903 if (PosTagger.isAdverb(pos)) posArr[i] = "r";
5904 if (PosTagger.isAdj(pos)) posArr[i] = "a";
5905 }
5906 return posArr;
5907 }
5908 return [];
5909 },
5910
5911 //TODO: example
5912 /**
5913 * Uses the default PosTagger to tag the input with a tag from the PENN tag set
5914 * @param {string | array} words the text to be tagged
5915 * @retuns {string | array}
5916 *
5917 */
5918 getPosTags : function(words) {
5919
5920 var arr = Type.is(words,S) ? RiTa.tokenize(words) : words;
5921 return PosTagger.tag(arr);
5922 },
5923
5924 // TODO: example
5925 /**
5926 * Takes an array of words and of tags and returns a
5927 * combined String of the form:
5928 * <pre>"The/dt doctor/nn treated/vbd dogs/nns"</pre>
5929 * assuming a "/" as 'delimiter'.
5930 *
5931 * @param {string} words the text to tag
5932 * @returns {string}
5933 */
5934 getPosTagsInline : function(words, delimiter) {
5935
5936 if (!words || !words.length) return E;
5937
5938 delimiter = delimiter || '/';
5939 words = Type.is(words,S) ? RiTa.tokenize(words) : words;
5940
5941 var sb = E, tags = RiTa.getPosTags(words);
5942 for (var i = 0; i < words.length; i++) {
5943
5944 sb += (words[i]);
5945 if (!RiTa.isPunctuation(words[i])) {
5946 sb += delimiter + tags[i];
5947 }
5948 sb += SP;
5949 }
5950
5951 return sb.trim();
5952 },
5953
5954 // TODO: example
5955 /**
5956 * Converts a PENN part-of-speech tag to the simplified WordNet scheme
5957 * (e.g. nn -> n, nns -> n, vbz -> v, rb -> r)
5958 * { "n" (noun), "v"(verb), "a"(adj), "r"(adverb), "-"(other) }
5959 * as a String.
5960 *
5961 * @param {string} tag pos tag to convert
5962 * @returns {string} simplified WordNet tag
5963 */
5964 posToWordNet : function(tag) {
5965
5966 if (Type.get(tag) != S)
5967 err('Arg1 must be string');
5968
5969 if (tag.length==0) return E;
5970
5971 if (PosTagger.isNoun(tag))
5972 return "n";
5973 else if (PosTagger.isVerb(tag))
5974 return "v";
5975 else if (PosTagger.isAdverb(tag))
5976 return "r";
5977 else if (PosTagger.isAdj(tag))
5978 return "a";
5979 else
5980 return "-";
5981 },
5982
5983 /**
5984 * Returns the present participle form of the stemmed or non-stemmed 'verb'.
5985 * @param {string} verb the verb
5986 * @returns {string} the present participle form of the verb
5987 */
5988 getPresentParticiple : function(verb) {
5989
5990 // TODO: need to call stem() and try again if first try fails
5991 return Conjugator().getPresentParticiple(verb);
5992 },
5993
5994 /**
5995 * Returns the past participle form of the stemmed or non-stemmed 'verb'.
5996 * @param {string} verb the verb
5997 * @returns {string} the past participle form of the verb
5998 */
5999 getPastParticiple : function(verb) {
6000
6001 // TODO: need to call stem() and try again if first try fails
6002 return Conjugator().getPastParticiple(verb);
6003 },
6004
6005 // TODO: 2 examples
6006 /**
6007 * Conjugates the 'verb' according to the specified options
6008 * @param {string} verb the verb stem
6009 * @param {object} args containing the relevant options for the conjugator
6010 * @returns {string} the conjugated verb
6011 */
6012 conjugate : function(verb, args) {
6013
6014 return Conjugator().conjugate(verb, args);
6015 },
6016
6017 // TODO: does this method requires a pre-stemmed noun? check tests...
6018 // does it work only with noun? (check 'natural')
6019 // TODO: 2 examples (regular & irregular)
6020
6021 /**
6022 * Pluralizes a word according to pluralization rules (see regexs in constants)
6023 * Returns the regular or irregular plural form of noun.
6024 *
6025 * @param {string} word the noun
6026 *
6027 * @returns {string} the plural form of noun
6028 */
6029 pluralize : function(word) {
6030
6031 if (!word.length) return E;
6032
6033 var i, rule, rules = PLURAL_RULES;
6034
6035 if (inArray(MODALS, word.toLowerCase())) {
6036 return word;
6037 }
6038
6039 i = rules.length;
6040 while (i--) {
6041 rule = rules[i];
6042 if (rule.applies(word.toLowerCase())) {
6043 return rule.fire(word);
6044 }
6045 }
6046
6047 return DEFAULT_PLURAL_RULE.fire(word);
6048 },
6049
6050 //TODO: 2 examples (regular & irregular)
6051 /**
6052 * Singularize a word according to singularization rules (see regexs in constants)
6053
6054 * @param {string} word the noun
6055 * @returns {string} the singular form of noun
6056 */
6057 singularize : function(word) {
6058
6059 if (!strOk(word)) return E;
6060
6061 err('Implement me!');
6062 },
6063
6064
6065 /**
6066 * Removes blank space from either side of a string
6067 *
6068 * @param {string} the input string
6069 *
6070 * @returns {string}
6071 */
6072 trim : function(str) {
6073
6074 return trim(str); // delegate to private
6075
6076 },
6077
6078
6079 /**
6080 * Tokenizes the string according to Penn Treebank conventions
6081 * See: http://www.cis.upenn.edu/~treebank/tokenization.html
6082 *
6083 * @param {string} words a sentence
6084 * @param {string | regex} regex (optional) the pattern to be used for tozenization
6085 *
6086 * @return{array} strings, which each element is a single token (or word)
6087 */
6088 tokenize : function(words, regex) {
6089
6090 //TODO: 2 examples for doc comment, one with 1 arg, one with 2 (a regex that splits on spaces)
6091
6092 if (regex) return words.split(regex);
6093
6094 words = trim(words).replace(/``/g, "`` ");
6095 words = words.replace(/''/g, " ''");
6096 words = words.replace(/([\\?!\"\\.,;:@#$%&])/g, " $1 ");
6097 words = words.replace(/\\.\\.\\./g, " ... ");
6098 words = words.replace(/\\s+/g, SP);
6099 words = words.replace(/,([^0-9])/g, " , $1");
6100 words = words.replace(/([^.])([.])([\])}>\"']*)\\s*$/g, "$1 $2$3 ");
6101 words = words.replace(/([\[\](){}<>])/g, " $1 ");
6102 words = words.replace(/--/g, " -- ");
6103 words = words.replace(/$/g, SP);
6104 words = words.replace(/^/g, SP);
6105 words = words.replace(/([^'])' /g, "$1 ' ");
6106 words = words.replace(/'([SMD]) /g, " '$1 ");
6107
6108 if (RiTa.SPLIT_CONTRACTIONS) { // SAVE
6109 words = words.replace(/'ll /g, " 'll ");
6110 words = words.replace(/'re /g, " 're ");
6111 words = words.replace(/'ve /g, " have ");
6112 words = words.replace(/n't /g, " not ");
6113
6114 words = words.replace(/'LL /g, " 'LL ");
6115 words = words.replace(/'RE /g, " 'RE ");
6116 words = words.replace(/'VE /g, " 'VE ");
6117 words = words.replace(/N'T /g, " N'T ");
6118 }
6119
6120 words = words.replace(/ ([Cc])an't /g, " $1an not ");
6121 words = words.replace(/ ([Cc])annot /g, " $1an not ");
6122 words = words.replace(/ ([Dd])idn't /g, " $1id not ");
6123 words = words.replace(/ ([CcWw])ouldn't /g, " $1ould not ");
6124
6125
6126 // "Nicole I. Kidman" gets tokenized as "Nicole I . Kidman"
6127 words = words.replace(/ ([A-Z]) \\./g, " $1. ");
6128 words = words.replace(/\\s+/g, SP);
6129 words = words.replace(/^\\s+/g, E);
6130
6131 return trim(words).split(/\s+/); // DCH: fixed bug here, 6/3/12
6132
6133 },
6134
6135
6136 // TODO: test and (probably) re-implement from RiTa (RiSplitter.java)
6137 /**
6138 * Splits the 'text' into sentences (according to PENN Treebank conventions)
6139 *
6140 * @param {string} text the text to be split
6141 * @param {string | regex} regex (optional) the pattern to be used for tozenization
6142 *
6143 * @returns {array} of sentences
6144 */
6145 splitSentences : function(text, regex) {
6146
6147 var arr = text.match(/(\S.+?[.!?])(?=\s+|$)/g);
6148
6149 return (text.length && arr && arr.length) ? arr : [ text ];
6150
6151 },
6152
6153 /**
6154 * Returns true if and only if the string matches 'pattern'
6155 *
6156 * @param {string} string string to test
6157 * @param {string | regex} pattern object containing regular expression
6158 * @returns {boolean} true if matched, else false
6159 */
6160 _regexMatch : function(string, pattern) {
6161
6162 if (isNull(string) || isNull(pattern))
6163 return false;
6164
6165 if (typeof pattern === S)
6166 pattern = new RegExp(pattern);
6167
6168 return pattern.test(string);
6169
6170 },
6171
6172 /**
6173 * Replaces all matches of 'pattern' in the 'string' with 'replacement'
6174 *
6175 * @param {string} string to test
6176 * @param {string | regex } pattern object containing regular expression
6177 * @param {string} replacement the replacement
6178 * @returns {string} with replacements or thestring on error
6179 */
6180 _regexReplace : function(string, pattern, replacement) {
6181
6182 if (isNull(string) || isNull(pattern))
6183 return E;
6184 if (typeof pattern === S)
6185 pattern = new RegExp(pattern); // TODO: is this necessary?
6186 return string.replace(pattern, replacement);
6187
6188 },
6189
6190 /**
6191 * Returns true if 'input' is an abbreviation
6192 *
6193 * @param {string} input
6194 * @param {boolean} caseSensitive (optional, default=false)
6195 *
6196 * @returns {boolean} true if 'input' is an abbreviation
6197 */
6198 isAbbreviation : function(input, caseSensitive) {
6199
6200 caseSensitive = caseSensitive || false;
6201 input = caseSensitive ? input : RiTa._titleCase(input);
6202 return inArray(this.ABBREVIATIONS, input);
6203
6204 },
6205
6206 /**
6207 * Returns true if sentence starts with a question word.
6208 *
6209 * @param {string} sentence
6210 *
6211 * @returns {boolean} true if 'sentence' starts with a question word.
6212 */
6213 isQuestion : function(sentence) {
6214
6215 var sentenceArr = RiTa.tokenize((sentence));
6216
6217 for (var i = 0; i < QUESTION_STARTS.length; i++) {
6218
6219 if (equalsIgnoreCase(sentenceArr[0], QUESTION_STARTS[i]))
6220 return true;
6221 }
6222 return false;
6223
6224 },
6225
6226 /**
6227 * Returns true if 'currentWord' is the final word of a sentence.
6228 * This is a simplified version of the OAK/JET sentence splitter method.
6229 *
6230 * @param {string} currentWord
6231 * @param {string} nextWord
6232 * @returns {boolean} true if 'currentWord' is the final word of a sentence.
6233 */
6234 isSentenceEnd : function(currentWord, nextWord) {
6235
6236 if ( !Type.is(currentWord,S) || !Type.is(nextWord,S) )
6237 return false;
6238
6239 var cw = currentWord.charAt(0), cWL = currentWord.length;
6240
6241 // token is a mid-sentence abbreviation (mainly, titles) --> middle of sent
6242 if (RiTa.isAbbreviation(currentWord))
6243 return false;
6244
6245 if (cWL > 1 && cw.indexOf("`'\"([{<") != -1 && RiTa.isAbbreviation(currentWord.substring(1)))
6246 return false;
6247
6248 if (cWL > 2 && ((currentWord.charAt(0) == '\''
6249 && currentWord.charAt(1) == '\'') || (currentWord.charAt(0) == '`'
6250 && currentWord.charAt(1) == '`')) && RiTa.isAbbreviation(currentWord.substring(2)))
6251 {
6252 return false;
6253 }
6254
6255 var nTL = nextWord.length,
6256 currentToken0 = currentWord.charAt(cWL - 1),
6257 currentToken1 = (cWL > 1) ? currentWord.charAt(cWL - 2) : ' ',
6258 currentToken2 = (cWL > 2) ? currentWord.charAt(cWL - 3) : ' ',
6259 nextToken0 = nextWord.charAt(0),
6260 nextToken1 = (nTL > 1) ? nextWord.charAt(1) : ' ',
6261 nextToken2 = (nTL > 2) ? nextWord.charAt(2) : ' ';
6262
6263 // nextToken does not begin with an upper case,
6264 // [`'"([{<] + upper case, `` + upper case, or < -> middle of sent.
6265 if (! (nextToken0 == nextToken0.toUpperCase()
6266 || (nextToken1 == nextToken1.toUpperCase() && nextToken0.indexOf("`'\"([{<") != -1)
6267 || (nextToken2 == nextToken2.toUpperCase() && ((nextToken0 == '`' && nextToken1 == '`')
6268 || (nextToken0 == '\'' && nextToken1 == '\'')))
6269 || nextWord == "_" || nextToken0 == '<'))
6270 return false;
6271
6272 // ends with ?, !, [!?.]["'}>)], or [?!.]'' -> end of sentence
6273 if (currentToken0 == '?'
6274 || currentToken0 == '!'
6275 || (currentToken1.indexOf("?!.") != -1 && currentToken0.indexOf("\"'}>)") != -1)
6276 || (currentToken2.indexOf("?!.") != -1 && currentToken1 == '\'' && currentToken0 == '\''))
6277 return true;
6278
6279 // last char not "." -> middle of sentence
6280 if (currentToken0 != '.') return false;
6281
6282 // Note: wont handle Q. / A. at start of sentence, as in a news wire
6283 //if (startOfSentence && (currentWord.equalsIgnoreCase("Q.")
6284 //|| currentWord.equalsIgnoreCase("A.")))return true;
6285
6286 // single upper-case alpha + "." -> middle of sentence
6287 if (cWL == 2 && currentToken1 == currentToken1.toUpperCase())
6288 return false;
6289
6290 // double initial (X.Y.) -> middle of sentence << added for ACE
6291 if (cWL == 4 && currentToken2 == '.'
6292 && (currentToken1 == currentToken1.toUpperCase() && currentWord.charAt(0) == currentWord.charAt(0).toUpperCase() ))
6293 return false;
6294
6295 // U.S. or U.N. -> middle of sentence
6296 //if (currentToken.equals("U.S.") || currentToken.equals("U.N."))
6297 //return false; // dch
6298
6299 //if (Util.isAbbreviation(currentToken)) return false;
6300
6301 // (for XML-marked text) next char is < -> end of sentence
6302 // if (nextToken0 == '<') return true;
6303
6304 return true;
6305
6306 },
6307
6308 /**
6309 * Returns true if sentence starts with a w-question word, eg (who,what,why,where,when,etc.)
6310 *
6311 * @param {string} sentence
6312 * @returns {boolean} true if sentence starts with a w-question word, eg (who,what,why,where,when,etc.)
6313 */
6314 isW_Question : function(sentence) {
6315 var sentenceArr = RiTa.tokenize((sentence));
6316 for (var i = 0; i < W_QUESTION_STARTS.length; i++)
6317 if (equalsIgnoreCase(sentenceArr[0], W_QUESTION_STARTS[i]))
6318 return true;
6319 return false;
6320
6321 },
6322
6323 /**
6324 * Returns a randomly ordered array of unique integers from 0 to numElements.
6325 * The size of the array will be numElements.
6326 *
6327 * @param {number} numElements
6328 * @returns {array} unique integers from 0 to numElements.
6329 */
6330 randomOrdering : function(numElements) {
6331
6332 if (!numElements || numElements < 1)// !isNum(numElements))
6333 err("bad arg");
6334
6335 var o = [];
6336 for ( var i = 0; i < numElements; i++) {
6337 o.push(i);
6338 }
6339
6340 // Array shuffle, from Jonas Raoni Soares Silva (http://jsfromhell.com/array/shuffle)
6341 for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x){}
6342
6343 return o;
6344
6345 },
6346
6347 /**
6348 * Removes and returns a random element from an array, returning
6349 * it and leaving the array 1 element shorter.
6350 *
6351 * @param {array} arr
6352 * @returns {array}
6353 */
6354 removeRandom : function(arr) {
6355
6356 var i = Math.floor((Math.random()*arr.length));
6357 remove(arr, i, i);
6358 return arr;
6359
6360 },
6361
6362 /**
6363 * Strips all punctuation from the given string
6364 * @param {string} text input
6365 * @param {array} chars (Optional) Characters to ignore
6366 * @returns {string} result
6367 */
6368 stripPunctuation : function(text) {
6369
6370 return (text === E) ? [E] : text.replace(PUNCTUATION_CLASS,E); // TODO: cache this?
6371
6372 },
6373
6374 // PUNCTUATION : "����`'""\",;:!?)([].#\"\\!@$%&}<>|+=-_\\/*{^",
6375
6376
6377 /**
6378 * Trims punctuation from each side of the token (does not trim whitespace or internal punctuation).
6379 *
6380 * @param {string} text input
6381 * @returns {string} result
6382 */
6383 trimPunctuation : function(text) {
6384
6385 // TODO: replace all this with 1 regex
6386
6387 // from the front
6388 while (text.length > 0) {
6389 var c = text.charAt(0);
6390 if (!RiTa.isPunctuation(c))
6391 break;
6392 text = text.substr(1);
6393 }
6394
6395 // from the back
6396 while (text.length > 0) {
6397 var c = text.charAt(text.length-1);
6398 if (!RiTa.isPunctuation(c))
6399 break;
6400 text = text.substring(0, text.length-1);
6401 }
6402 return text;
6403
6404
6405 },
6406
6407 /**
6408 * Returns true if every character of 'text' is a punctuation character
6409 *
6410 * @param {string} text input
6411 * @returns {boolean}
6412 */
6413 // TEST: PUNCTUATION : "����`'""\",;:!?)([].#\"\\!@$%&}<>|+=-_\\/*{^",
6414 isPunctuation : function(text) {
6415
6416 if (!text || !text.length) return false;
6417
6418 return ONLY_PUNCT.test(text);
6419
6420 },
6421
6422 /**
6423 * Returns true if any character of 'text' is a punctuation character
6424 *
6425 * @param {string} text input
6426 * @returns {boolean}
6427 */
6428 // TEST: PUNCTUATION : "����`'""\",;:!?)([].#\"\\!@$%&}<>|+=-_\\/*{^",
6429 hasPunctuation : function(text) {
6430
6431 if (!text || !text.length) return false;
6432
6433 return ONLY_PUNCT.test(text);
6434 },
6435
6436 /**
6437 * Returns a string containing all phonemes for the input text
6438 *
6439 * @param {string | array} words to analyze
6440 * @returns {string} e.g., "dh-ax-d-ao-g-r-ae-n-f-ae-s-t"
6441 */
6442 getPhonemes : function(words) {
6443
6444 return RiString(words).analyze().get(RiTa.PHONEMES);
6445
6446 },
6447
6448 /**
6449 * Analyzes the given string and returns a new string containing the stresses
6450 * for each syllable of the input text
6451 *
6452 * @param {string | array} words to analyze
6453 *
6454 * @returns {string} e.g., "01-0-1", with 1's meaning 'stressed',
6455 * and 0's meaning 'unstressed',
6456 */
6457 getStresses : function(words) {
6458
6459 return RiString(words).analyze().get(RiTa.STRESSES);
6460 },
6461
6462 /**
6463 * Analyzes the given string, Returns a String containing the phonemes for each syllable of
6464 * each word of the input text, delimited by dashes (phonemes) and spaces (words)
6465 *
6466 * @param {string | array} words words to analyze
6467 *
6468 * @returns {string} e.g., "dh-ax d-ao-g r-ae-n f-ae-s-t"
6469 * for the 4 syllables of the phrase 'The dog ran fast'
6470 */
6471 getSyllables : function(words) {
6472
6473 return RiString(words).analyze().get(RiTa.SYLLABLES);
6474
6475 },
6476
6477 /**
6478 * Returns the # of words in the object according to the default WordTokenizer.
6479 *
6480 * @param {string} words the string to analyze
6481 * @returns {number}
6482 */
6483 getWordCount : function(words) {
6484
6485 return RiTa.tokenize(words).length;
6486
6487 },
6488
6489 /**
6490 * Extracts base roots from a word by lower-casing it, then removing prefixes and suffixes.
6491 * @param {string} word the verb to analyze
6492 * @param {string} type one of either 'Lancaster' (the default) or 'Porter',
6493 * to specifiy the stemming algorithm to use
6494 * @returns {string} the stemmed form of 'verb' according to the RiTa stemming rules.
6495 */
6496 stem : function(word, type) {
6497
6498 type = type || 'Lancaster'; // CONSTANTS
6499
6500 if (type != 'Lancaster' && type != 'Porter')
6501 err('Bad stemmer type: '+type);
6502
6503 var stemImpl = (type == 'Porter') ? Stemmer.stem_Porter : Stemmer.stem_Lancaster;
6504
6505 if (word.indexOf(SP) < 0) return stemImpl(word);
6506
6507 // dump non-words - http://qaa.ath.cx/porter_js_demo.html
6508 word = word.replace(/[^\w]/g, ' ');
6509
6510 // dump multiple white-space - http://qaa.ath.cx/porter_js_demo.html
6511 word = word.replace(/\s+/g, ' ');
6512
6513 var res = [], words = word.split(' ');
6514
6515 for ( var i = 0; i < words.length; i++) {
6516
6517 res.push(stemImpl(words[i]));
6518 }
6519
6520 return res.join(SP);
6521 },
6522
6523 /**
6524 * For convenience, provides implementations of some of Processing built-in
6525 * method, e.g. size(), background(), etc. and backwards compatibility with
6526 * the original RiTa/Processing Java library
6527 *
6528 * @param {boolean} true to enable compatibility, else false
6529 */
6530 p5Compatible : function(value) {
6531
6532 if (!arguments.callee.setupAndDraw) {
6533
6534 arguments.callee.setupAndDraw = function() {
6535 if (typeof window.setup == F) setup();
6536 if (typeof window.draw == F) RiText.loop();
6537 }
6538 }
6539
6540 if (value) {
6541
6542 // alias for some P5 member functions
6543 RiText.prototype.fill = RiText.prototype.color;
6544 RiText.prototype.textAlign = RiText.prototype.align;
6545 RiText.prototype.textFont = RiText.prototype.font;
6546 RiText.prototype.textSize = RiText.prototype.fontSize;
6547
6548 // alias for some RiTa-java functions
6549 RiText.prototype.setText = RiText.prototype.text;
6550 RiText.prototype.fadeColor = RiText.prototype.colorTo;
6551 RiText.prototype.fadeToText = RiText.prototype.textTo;
6552 RiText.prototype.setColor = RiText.prototype.color;
6553
6554 // alias for RiTa-java static functions
6555 RiText.setDefaultFont = RiText.defaultFont;
6556 RiText.setDefaultColor = RiText.defaultColor;
6557 RiText.setDefaultAlignment = RiText.defaultAlignment;
6558 RiText.setCallbackTimer = RiText.timer;
6559
6560 if (!hasProcessing) {
6561
6562 // add some common P5 global methods (sorry, namespace)
6563
6564 if (!window.line) window.line = RiText.line;
6565 if (!window.size) window.size= RiText.size;
6566 if (!window.width) window.width = RiText.width; // want the var
6567 if (!window.height) window.height= RiText.height; // want the var
6568 if (!window.createFont) window.createFont= RiText.createFont;
6569 if (!window.background) window.background= RiText.background;
6570 if (!window.random) window.random= RiText.random;
6571 if (!window.RIGHT) window.RIGHT = RiText.RIGHT;
6572 if (!window.LEFT) window.LEFT = RiText.LEFT;
6573 if (!window.CENTER) window.CENTER = RiText.CENTER;
6574
6575 window.onload = arguments.callee.setupAndDraw;
6576 }
6577 }
6578 else { // not-compatible (clear extra stuff)
6579
6580 delete RiText.prototype.fill;
6581 delete RiText.prototype.textAlign;
6582 delete RiText.prototype.textFont;
6583 delete RiText.prototype.textSize;
6584
6585 delete RiText.prototype.setColor;
6586 delete RiText.prototype.setText;
6587 delete RiText.prototype.fadeColor;
6588 delete RiText.prototype.fadeToText;
6589
6590 delete RiText.setDefaultFont;
6591 delete RiText.setDefaultColor;
6592 delete RiText.setDefaultAlignment;
6593 delete RiText.setCallbackTimer;
6594
6595 if (!hasProcessing) {
6596
6597 // are these checks needed?
6598 if (window.line === RiText.line) delete window.line;
6599 if (window.size === RiText.size) delete window.size;
6600 if (window.width === RiText.width) delete window.width;
6601 if (window.height === RiText.height) delete window.height;
6602 if (window.createFont === RiText.createFont) delete window.createFont;
6603 if (window.background === RiText.background) delete window.background;
6604 if (window.random === RiText.random) delete window.random;
6605 if (window.RIGHT === RiText.RIGHT) delete window.RIGHT;
6606 if (window.LEFT === RiText.LEFT) delete window.LEFT;
6607 if (window.CENTER === RiText.CENTER) delete window.CENTER;
6608
6609 if (window.onload == arguments.callee.setupAndDraw)
6610 delete window.onload;
6611 }
6612 }
6613 },
6614
6615 /**
6616 * Converts 'input' to Titlecase (1st letter upper, rest lower)
6617 */
6618 _titleCase : function(input) {
6619
6620 if (!input || !input.length) return input;
6621
6622 return input.substring(0,1).toUpperCase() + input.substring(1);
6623 }
6624
6625 } // end RiTa object
6626
6627
6628 /////////////////////////////////////////////////////////////////////////
6629 // RiLetterToSound (adapted from FreeTTS text-to-speech)
6630 /////////////////////////////////////////////////////////////////////////
6631
6632 var LetterToSound = makeClass();
6633
6634 /**
6635 * Entry in file represents the total number of states in the file. This
6636 * should be at the top of the file. The format should be "TOTAL n" where n is
6637 * an integer value.
6638 */
6639 LetterToSound.TOTAL = "TOTAL";
6640
6641 /**
6642 * Entry in file represents the beginning of a new letter index. This should
6643 * appear before the list of a new set of states for a particular letter. The
6644 * format should be "INDEX n c" where n is the index into the state machine
6645 * array and c is the character.
6646 */
6647 LetterToSound.INDEX = "INDEX";
6648
6649 /**
6650 * Entry in file represents a state. The format should be "STATE i c t f"
6651 * where 'i' represents an index to look at in the decision string, c is the
6652 * character that should match, t is the index of the state to go to if there
6653 * is a match, and f is the of the state to go to if there isn't a match.
6654 */
6655 LetterToSound.STATE = "STATE";
6656
6657 /**
6658 * Entry in file represents a final state. The format should be "PHONE p"
6659 * where p represents a phone string that comes from the phone table.
6660 */
6661 LetterToSound.PHONE = "PHONE";
6662
6663 /**
6664 * If true, the state string is tokenized when it is first read. The side
6665 * effects of this are quicker lookups, but more memory usage and a longer
6666 * startup time.
6667 */
6668 LetterToSound.tokenizeOnLoad = true;
6669
6670 /**
6671 * If true, the state string is tokenized the first time it is referenced. The
6672 * side effects of this are quicker lookups, but more memory usage.
6673 */
6674 LetterToSound.tokenizeOnLookup = false;
6675
6676 /**
6677 * The 'window size' of the LTS rules.
6678 */
6679 LetterToSound.WINDOW_SIZE = 4;
6680
6681 /** The list of phones that can be returned by the LTS rules.
6682 LetterToSound.phonemeTable = null; */
6683
6684 LetterToSound.prototype = {
6685
6686 /**
6687 * @private
6688 */
6689 initialize : function() {
6690
6691 /**
6692 * The indices of the starting points for letters in the state machine.
6693 */
6694 this.letterIndex = {};
6695
6696 /**
6697 * An array of characters to hold a string for checking against a rule. This
6698 * will be reused over and over again, so the goal was just to have a single
6699 * area instead of new'ing up a new one for every word. The name choice is to
6700 * match that in Flite's <code>cst_lts.c</code>.
6701 */
6702 this.fval_buff = [];
6703
6704 /**
6705 * The LTS state machine. Entries can be String or State. An ArrayList could
6706 * be used here -- I chose not to because I thought it might be quicker to
6707 * avoid dealing with the dynamic resizing.
6708 */
6709 this.stateMachine = null;
6710
6711 /**
6712 * The number of states in the state machine.
6713 */
6714 this.numStates = 0;
6715
6716 // verify that the lts rules are included
6717 if (!LetterToSound.RULES.length) throw Error("No LTS Rules found!");
6718
6719 // add the rules to the object (static?)
6720 for ( var i = 0; i < LetterToSound.RULES.length; i++) {
6721
6722 this.parseAndAdd(LetterToSound.RULES[i]);
6723 }
6724 },
6725
6726 _createState : function(type, tokenizer) {
6727
6728 if (type === LetterToSound.STATE)
6729 {
6730 var index = parseInt(tokenizer.nextToken());
6731 var c = tokenizer.nextToken();
6732 var qtrue = parseInt(tokenizer.nextToken());
6733 var qfalse = parseInt(tokenizer.nextToken());
6734
6735 return new DecisionState(index, c.charAt(0), qtrue, qfalse);
6736 }
6737 else if (type === LetterToSound.PHONE)
6738 {
6739 return new FinalState(tokenizer.nextToken());
6740 }
6741
6742 throw Error("Unexpected type: "+type);
6743 },
6744
6745 /**
6746 * Creates a word from the given input line and add it to the state machine.
6747 * It expects the TOTAL line to come before any of the states.
6748 *
6749 * @param line the line of text from the input file
6750 */
6751 parseAndAdd : function(line) {
6752
6753 var tokenizer = new StringTokenizer(line, SP);
6754 var type = tokenizer.nextToken();
6755
6756 if (type == LetterToSound.STATE || type == LetterToSound.PHONE)
6757 {
6758 if (LetterToSound.tokenizeOnLoad)
6759 {
6760 this.stateMachine[this.numStates] = this._createState(type, tokenizer);
6761 }
6762 else
6763 {
6764 this.stateMachine[this.numStates] = line;
6765 }
6766 this.numStates++;
6767 }
6768 else if (type==LetterToSound.INDEX)
6769 {
6770 var index = parseInt(tokenizer.nextToken());
6771 if (index != this.numStates)
6772 {
6773 throw Error("Bad INDEX in file.");
6774 }
6775 else
6776 {
6777 var c = tokenizer.nextToken();
6778 this.letterIndex[c] = index;
6779
6780 }
6781 //console.log(type+" : "+c+" : "+index + " "+this.letterIndex[c]);
6782 }
6783 else if (type==LetterToSound.TOTAL)
6784 {
6785 this.stateMachine = [];
6786 this.stateMachineSize = parseInt(tokenizer.nextToken());
6787 }
6788 },
6789
6790 /**
6791 * Calculates the phone list for a given word. If a phone list cannot be
6792 * determined, <code>[]</code> is returned.
6793 *
6794 * @param {string | array } input the word or words to find
6795 *
6796 * @return {string} phones for word, separated by delim,
6797 * or <code>empty string</code>
6798 */
6799 getPhones : function(input, delim) {
6800
6801 var ph, result = [];
6802
6803 delim = delim || '-';
6804
6805 if (Type.is(input, S)) {
6806
6807 if (!input.length) return E;
6808
6809 input = RiTa.tokenize(input);
6810 }
6811
6812 for (var i = 0; i < input.length; i++) {
6813
6814 ph = this._computePhones(input[i]);
6815 result[i] = ph ? ph.join(delim) : E;
6816 }
6817
6818 return result.join(delim);
6819 },
6820
6821 /**
6822 * Calculates the phone list for a given word. If a phone list cannot be
6823 * determined, <code>null</code> is returned.
6824 *
6825 * @param word the word or words to find
6826 *
6827 * @return array of phones for word or <code>null</code>
6828 */
6829 _computePhones : function(word) {
6830
6831 var dig, phoneList = [], full_buff, tmp, currentState, startIndex, stateIndex, c;
6832
6833 if (!word || !word.length || RiTa.isPunctuation(word))
6834 return null;
6835
6836 word = word.toLowerCase();
6837
6838 if (isNum(word)) {
6839
6840 word = (word.length>1) ? word.split(E) : [word];
6841
6842 for (var i = 0; i < word.length; i++) {
6843
6844 dig = parseInt(word[i]);
6845 if (dig < 0 || dig > 9)
6846 throw Error("Attempt to pass multi-digit number to LTS: '"+word+"'");
6847
6848 phoneList.push(Phones.digits[dig]);
6849 }
6850
6851 return phoneList;
6852 }
6853
6854 // Create "000#word#000"
6855 tmp = "000#"+word.trim()+"#000", full_buff = tmp.split("");
6856
6857 // For each character in the word, create a WINDOW_SIZE
6858 // context on each size of the character, and then ask the
6859 // state machine what's next. Its magic
6860 for (var pos = 0; pos < word.length; pos++) {
6861
6862 for (var i = 0; i < LetterToSound.WINDOW_SIZE; i++) {
6863
6864 this.fval_buff[i] = full_buff[pos + i];
6865 this.fval_buff[i + LetterToSound.WINDOW_SIZE] = full_buff[i + pos + 1 + LetterToSound.WINDOW_SIZE];
6866 }
6867
6868 c = word.charAt(pos);
6869 startIndex = this.letterIndex[c];
6870
6871 // must check for null here, not 0
6872 if (startIndex==null) throw Error("No LTS index for character: '"+
6873 c + "', isDigit=" + isNum(c) + ", isPunct=" + RiTa.isPunctuation(c));
6874
6875 stateIndex = parseInt(startIndex);
6876
6877 currentState = this.getState(stateIndex);
6878
6879 while (! (currentState instanceof FinalState) ) {
6880
6881 stateIndex = currentState.getNextState(this.fval_buff);
6882 currentState = this.getState(stateIndex);
6883 }
6884
6885 currentState.append(phoneList);
6886 }
6887
6888 return phoneList;
6889 },
6890
6891
6892 // /**
6893 // * Makes a character array that looks like "000#word#000".
6894 // *
6895 // * @param word the original word
6896 // *
6897 // * @return the padded word
6898 // */
6899 // getFullBuff : function( word) {
6900 //
6901 // var full_buff = [], WINDOW_SIZE = LetterToSound.WINDOW_SIZE;
6902 //
6903 // // Make full_buff look like "000#word#000"
6904 //
6905 // for (var i = 0; i < (WINDOW_SIZE - 1); i++)
6906 // full_buff[i] = '0';
6907 //
6908 // full_buff[WINDOW_SIZE - 1] = '#';
6909 //
6910 // word.getChars(0, word.length(), full_buff, WINDOW_SIZE);
6911 //
6912 // for (var i = 0; i < (WINDOW_SIZE - 1); i++)
6913 // {
6914 // full_buff[full_buff.length - i - 1] = '0';
6915 // }
6916 // full_buff[full_buff.length - WINDOW_SIZE] = '#';
6917 //
6918 // return full_buff;
6919 // },
6920
6921 getState : function(i) {
6922
6923 if (Type.is(i,N)) {
6924
6925 var state = null;
6926
6927 // WORKING HERE: this check should fail :: see java
6928 if (Type.is(this.stateMachine[i],S)) {
6929
6930 state = this.getState(this.stateMachine[i]);
6931 if (LetterToSound.tokenizeOnLookup)
6932 this.stateMachine[i] = state;
6933 }
6934 else
6935 state = this.stateMachine[i];
6936
6937 return state;
6938 }
6939 else {
6940
6941 var tokenizer = new StringTokenizer(i, " ");
6942 return this.getState(tokenizer.nextToken(), tokenizer);
6943 }
6944 }
6945 }
6946
6947 /////////////////////////////////////////////////////////////////////////
6948 // DecisionState
6949 /////////////////////////////////////////////////////////////////////////
6950
6951 var DecisionState = makeClass();
6952
6953 DecisionState.TYPE = 1;
6954
6955 DecisionState.prototype = {
6956
6957 /**
6958 * Class constructor.
6959 *
6960 * @param index
6961 * the index into a string for comparison to c
6962 * @param c
6963 * the character to match in a string at index
6964 * @param qtrue
6965 * the state to go to in the state machine on a match
6966 * @param qfalse
6967 * the state to go to in the state machine on no match
6968 */
6969 // char c, var index, var qtrue, var qfalse;
6970 initialize : function(index, c, qtrue, qfalse) {
6971
6972 this.c = c;
6973 this.index = index;
6974 this.qtrue = qtrue;
6975 this.qfalse = qfalse;
6976 },
6977
6978 type : function() {
6979
6980 return "DecisionState";
6981 },
6982
6983 /**
6984 * Gets the next state to go to based upon the given character sequence.
6985 *
6986 * @param chars the characters for comparison
6987 *
6988 * @returns an index into the state machine.
6989 */
6990 //public var getNextState(char[] chars)
6991 getNextState : function(chars) {
6992
6993 return (chars[this.index] == this.c) ? this.qtrue : this.qfalse;
6994 },
6995
6996 /**
6997 * Outputs this <code>State</code> as though it came from the text input
6998 * file.
6999 */
7000 toString : function() {
7001 return this.STATE + " " + this.index + " " + this.c + " " + this.qtrue + " " + this.qfalse;
7002 },
7003
7004 /**
7005 * Writes this <code>State</code> to the given output stream.
7006 *
7007 * @param dos
7008 * the data output stream
7009 *
7010 * @throws IOException
7011 * if an error occurs
7012
7013 writeBinary : function(dos)
7014 {
7015 // dos.writeInt(TYPE);
7016 // dos.writeInt(index);
7017 // dos.writeChar(c);
7018 // dos.writeInt(qtrue);
7019 // dos.writeInt(qfalse);
7020 } */
7021
7022 /**
7023 * Loads a <code>DecisionState</code> object from the given input stream.
7024 *
7025 * @param dis
7026 * the data input stream
7027 * @return a newly constructed decision state
7028 *
7029 * @throws IOException
7030 * if an error occurs
7031
7032 public static State loadBinary(DataInputStream dis) throws IOException
7033 {
7034 var index = dis.readInt();
7035 char c = dis.readChar();
7036 var qtrue = dis.readInt();
7037 var qfalse = dis.readInt();
7038 return new DecisionState(index, c, qtrue, qfalse);
7039 }*/
7040
7041 /**
7042 * Compares this state to another state for debugging purposes.
7043 *
7044 * @param other
7045 * the other state to compare against
7046 *
7047 * @return true if the states are equivalent
7048 */
7049 compare : function(other) {
7050
7051 if (other instanceof DecisionState)
7052 {
7053 var otherState = other;
7054 return index == otherState.index && c == otherState.c
7055 && qtrue == otherState.qtrue && qfalse == otherState.qfalse;
7056 }
7057 return false;
7058 }
7059
7060 }// end DecisionState
7061
7062 // ///////////////////////////////////////////////////////////////////////
7063 // FinalState
7064 // ///////////////////////////////////////////////////////////////////////
7065
7066 var FinalState = makeClass();
7067
7068 FinalState.TYPE = 2;
7069
7070 FinalState.prototype = {
7071
7072 /**
7073 * Class constructor. The string "epsilon" is used to indicate an empty list.
7074 * @param {} phones the phones for this state
7075 */
7076 initialize : function(phones) {
7077
7078 this.phoneList = [];
7079
7080 if (phones===("epsilon"))
7081 {
7082 this.phoneList = null;
7083 }
7084 else if (Type.is(phones,A)) {
7085
7086 this.phoneList = phones;
7087 }
7088 else
7089 {
7090 var i = phones.indexOf('-');
7091 if (i != -1)
7092 {
7093 this.phoneList[0] = phones.substring(0, i);
7094 this.phoneList[1] = phones.substring(i + 1);
7095 }
7096 else
7097 {
7098 this.phoneList[0] = phones;
7099 }
7100 }
7101 },
7102
7103 type : function() {
7104
7105 return "FinalState";
7106 },
7107
7108 /**
7109 * Appends the phone list for this state to the given <code>ArrayList</code>.
7110 * @param {array} array the array to append to
7111 */
7112 append : function(array) {
7113
7114 if (!this.phoneList) return;
7115
7116 for (var i = 0; i < this.phoneList.length; i++)
7117 array.push(this.phoneList[i]);
7118 },
7119
7120 /**
7121 * Outputs this <code>State</code> as though it came from the text input
7122 * file. The string "epsilon" is used to indicate an empty list.
7123 *
7124 * @return a <code>String</code> describing this <code>State</code>
7125 */
7126 toString : function() {
7127
7128 if (!this.phoneList)
7129 {
7130 return LetterToSound.PHONE + " epsilon";
7131 }
7132 else if (this.phoneList.length == 1)
7133 {
7134 return LetterToSound.PHONE + " " + this.phoneList[0];
7135 }
7136 else
7137 {
7138 return LetterToSound.PHONE + " " + this.phoneList[0] + "-" + this.phoneList[1];
7139 }
7140 },
7141
7142 /**
7143 * Compares this state to another state for debugging purposes.
7144 *
7145 * @param other
7146 * the other state to compare against
7147 *
7148 * @return <code>true</code> if the states are equivalent
7149 */
7150 compare : function(other)
7151 {
7152 if (other instanceof FinalState)
7153 {
7154 var otherState = other;
7155 if (!phoneList)
7156 {
7157 return (otherState.phoneList == null);
7158 }
7159 else
7160 {
7161 for (var i = 0; i < phoneList.length; i++)
7162 {
7163 if (!phoneList[i].equals(otherState.phoneList[i]))
7164 {
7165 return false;
7166 }
7167 }
7168 return true;
7169 }
7170 }
7171 return false;
7172 },
7173
7174 /**
7175 * Writes this state to the given output stream.
7176 *
7177 * @param dos
7178 * the data output stream
7179 *
7180 * @throws IOException
7181 * if an error occurs
7182
7183 public void writeBinary : function(DataOutputStream dos) throws IOException
7184 {
7185 dos.writeInt(TYPE);
7186 if (phoneList == null)
7187 {
7188 dos.writeInt(0);
7189 } else
7190 {
7191 dos.writeInt(phoneList.length);
7192 for (var i = 0; i < phoneList.length; i++)
7193 {
7194 dos.writeInt(phonemeTable.indexOf(phoneList[i]));
7195 }
7196 }
7197 } */
7198
7199 /**
7200 * Loads a FinalState object from the given input stream
7201 *
7202 * @param dis
7203 * the data input stream
7204 *
7205 * @return a newly constructed final state
7206 *
7207 * @throws IOException
7208 * if an error occurs
7209
7210 public static State loadBinary : function(DataInputStream dis) throws IOException
7211 {
7212 String[] phoneList;
7213 var phoneListLength = dis.readInt();
7214
7215 if (phoneListLength == 0)
7216 {
7217 phoneList = null;
7218 } else
7219 {
7220 phoneList = new String[phoneListLength];
7221 }
7222 for (var i = 0; i < phoneListLength; i++)
7223 {
7224 var index = dis.readInt();
7225 phoneList[i] = (String) phonemeTable.get(index);
7226 }
7227 return new FinalState(phoneList);
7228 } */
7229 }
7230
7231 /////////////////////////////////////////////////////////////////////////
7232 //StringTokenizer
7233 /////////////////////////////////////////////////////////////////////////
7234
7235 var StringTokenizer = makeClass();
7236
7237 StringTokenizer.prototype = {
7238
7239 initialize : function(str, delim) {
7240
7241 this.idx = 0;
7242 this.text = str;
7243 this.delim = delim || " ";
7244 this.tokens = str.split(delim);
7245 },
7246
7247 nextToken : function() {
7248
7249 return (this.idx < this.tokens.length) ? this.tokens[this.idx++] : null;
7250 }
7251 }
7252
7253 ////////////////////////// PRIVATE CLASSES ///////////////////////////////
7254
7255
7256 // ///////////////////////////////////////////////////////////////////////
7257 // RiText_Canvas 2D-Renderer
7258 // ///////////////////////////////////////////////////////////////////////
7259
7260 /**
7261 * @name RiText_Canvas
7262 * @class
7263 * @private
7264 */
7265 var RiText_Canvas = makeClass();
7266
7267 RiText_Canvas.prototype = {
7268
7269 initialize : function(ctx) {
7270 this.ctx = ctx;
7271 },
7272
7273 _getGraphics : function() {
7274 return this.ctx;
7275 },
7276
7277 _pushState : function() {
7278 this.ctx.save();
7279 return this;
7280 },
7281
7282 _popState : function() {
7283 this.ctx.restore();
7284 return this;
7285 },
7286
7287 _background : function(r,g,b,a) {
7288 this._fill(r,g,b,a);
7289 this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height);
7290 },
7291
7292 _scale : function(sx, sy) {
7293 this.ctx.scale(sx, sy, 1);
7294 },
7295
7296 _translate : function(tx, ty) {
7297 this.ctx.translate(tx, ty, 0);
7298 },
7299
7300 _rotate : function(zRot) {
7301 this.ctx.rotate(0,0,zRot);
7302 },
7303
7304 _line : function(x1,y1,x2,y2,lw) {
7305
7306
7307 lw = lw || 1; // canvas hack for crisp lines
7308 x1 = Math.round(x1), x2 = Math.round(x2);
7309 y1 = Math.round(y1), y2 = Math.round(y2);
7310
7311 //log('line: ('+(x1)+","+(y1)+","+(x2)+","+(y2)+")");
7312
7313 this.ctx.save();
7314
7315 if (x1 === x2) {
7316 if (y1 > y2) {
7317 var swap = y1;
7318 y1 = y2;
7319 y2 = swap;
7320 }
7321 y2++;
7322 if (lw % 2 === 1)
7323 this.ctx.translate(0.5, 0);
7324 }
7325 else if (y1 === y2) {
7326 if (x1 > x2) {
7327 var swap = x1;
7328 x1 = x2;
7329 x2 = swap;
7330 }
7331 x2++;
7332 if (lw % 2 === 1)
7333 this.ctx.translate(0, 0.5);
7334 }
7335
7336
7337 this.ctx.beginPath();
7338 this.ctx.moveTo(x1 || 0, y1 || 0);
7339 this.ctx.lineTo(x2 || 0, y2 || 0);
7340 this.ctx.lineWidth = lw;
7341 this.ctx.stroke();
7342
7343 this.ctx.restore();
7344 },
7345
7346 _rect : function(x,y,w,h) {
7347
7348 this._line(x,y,x+w,y);
7349 this._line(x,y+h,x+w,y+h);
7350 this._line(x,y,x,y+h);
7351 this._line(x+w,y,x+w,y+h)
7352
7353 // TODO: add test with filled bounding boxes and check
7354 this.ctx.fillRect(x+1,y+1,w-1,h-1); // [hack]
7355 },
7356
7357 _size : function(w, h, renderer) {
7358
7359
7360 this.ctx.canvas.width = w;
7361 this.ctx.canvas.height = h;
7362 if (renderer) console.warn("Renderer arg ignored");
7363 },
7364
7365 _createFont : function(fontName, fontSize, fontLeading) {
7366
7367 var font = {
7368 name: fontName,
7369 size: fontSize || RiText.defaults.font.size,
7370 leading: fontLeading || (fontSize * RiText.defaults.leadingFactor)
7371 };
7372 return font;
7373 },
7374
7375 _width : function() {
7376
7377 return this.ctx.canvas.width || 200;
7378 },
7379
7380 _height : function() {
7381
7382 return this.ctx.canvas.height || 200;
7383 },
7384
7385 _fill : function(r,g,b,a) {
7386
7387 this.ctx.fillStyle="rgba("+Math.round(r)+","+Math.round(g)+","+Math.round(b)+","+(a/255)+")";
7388 },
7389
7390 _stroke : function(r,g,b,a) {
7391
7392 this.ctx.strokeStyle = Type.is(r,S) ? r : "rgba("+Math.round(r)
7393 +","+Math.round(g)+","+Math.round(b)+","+(a/255)+")";
7394 },
7395
7396 _textAlign : function(align) {
7397
7398 switch (align) {
7399 case RiText.LEFT:
7400 this.ctx.textAlign = 'left';
7401 break;
7402 case RiText.CENTER:
7403 this.ctx.textAlign = 'center';
7404 break;
7405 case RiText.RIGHT:
7406 this.ctx.textAlign = 'right';
7407 break;
7408 }
7409 },
7410
7411 _type : function() { return "Canvas"; },
7412
7413 // only applies the font to the context!
7414 _textFont : function(fontObj) {
7415 if (!Type.is(fontObj,O))
7416 err("_textFont expects object, but got: "+fontObj);
7417 this.ctx.font = "normal "+fontObj.size+"px "+fontObj.name;
7418 },
7419
7420 _textAscent : function(rt) {
7421 return this._getMetrics(rt).ascent;
7422 },
7423
7424 _textDescent : function(rt) {
7425 return this._getMetrics(rt).descent;
7426
7427 },
7428
7429 // should operate on the RiText itself (take rt as arg?)
7430 _text : function(str, x, y) {
7431 //log("text: "+str+","+x+","+y+","+this.ctx.textAlign);
7432 this.ctx.baseline = 'alphabetic';
7433 this.ctx.fillText(str, x, y);
7434 //this.ctx.strokeText(str, x, y);
7435 },
7436
7437 _textWidth : function(fontObj, str) {
7438 this.ctx.save();
7439 this._textFont(fontObj);
7440 var tw = this.ctx.measureText(str).width;
7441 this.ctx.restore();
7442 return tw;
7443 },
7444
7445 _textHeight : function(rt) {
7446 return this._getBoundingBox(rt).height;
7447 },
7448
7449 // hack to deal with lack of metrics in the canvas
7450 _getBoundingBox : function(rt) {
7451
7452 this.ctx.save();
7453 this._textFont(rt._font);
7454 var w = this.ctx.measureText(rt.text()).width;
7455 var metrics = this._getMetrics(rt);
7456 //log('[CTX] ascent='+metrics.ascent+' descent='+metrics.descent+" h="+(metrics.ascent+metrics.descent));
7457 this.ctx.restore();
7458 return { x: 0, y: metrics.descent-1, width: w, height: metrics.ascent+metrics.descent+1 };
7459 },
7460
7461 _getMetrics : function(rt) {// does this need font.size? no
7462
7463 var fontObj = rt._font, str = rt.text();
7464
7465 //log('_getMetrics:'+fontObj+","+str);
7466 var text = $('<span style="font-size: '+fontObj.size+'; font-family: '+fontObj.name+'">'+str+'</span>');
7467 var block = $('<div style="display: inline-block; width: 1px; height: 0px;"></div>');
7468
7469 var div = $('<div></div>');
7470 div.append(text, block);
7471
7472 var body = $('body');
7473 body.append(div);
7474
7475 try {
7476 var result = {};
7477
7478 block.css({ verticalAlign: 'baseline' });
7479 result.ascent = block.offset().top - text.offset().top + 1;
7480
7481 block.css({ verticalAlign: 'bottom' });
7482 var height = block.offset().top - text.offset().top;
7483
7484 result.descent = (height - result.ascent);
7485 result.ascent -= result.descent;
7486
7487 } finally {
7488 div.remove();
7489 }
7490
7491 return result;
7492 },
7493
7494 toString : function() {
7495 return "RiText_"+this._type;
7496 }
7497
7498 }
7499
7500 // ////////////////////////////////////////////////////////////
7501 // TextNode
7502 // ////////////////////////////////////////////////////////////
7503
7504 /**
7505 * @name TextNode
7506 * @class
7507 * @private
7508 */
7509 var TextNode = makeClass();
7510
7511 TextNode.ignoreCase = true;
7512
7513 TextNode.prototype = {
7514
7515 initialize : function(parent, token) {
7516
7517 this.count = 0;
7518 this.children = {};
7519 this.parent = parent;
7520 this.token = token;
7521 },
7522
7523 selectChild : function(regex, probabalisticSelect) {
7524
7525 var ps = probabalisticSelect || true;
7526 return this.children ? this._select(this.childNodes(regex), ps) : null;
7527 },
7528
7529 _select : function (arr, probabalisticSelect) {
7530
7531 if (!arr) throw TypeError("bad arg to '_select()'");
7532
7533 probabalisticSelect = probabalisticSelect || false;
7534
7535 return (probabalisticSelect ? this._probabalisticSelect(arr)
7536 : arr[Math.floor((Math.random()*arr.length))]);
7537 },
7538
7539 _probabalisticSelect : function(arr) {
7540
7541 if (!arr) throw TypeError("bad arg to '_probabalisticSelect()'");
7542
7543 //L("RiTa.probabalisticSelect("+c+", size="+c.size()+")");
7544 if (!arr.length) return null;
7545 if (arr.length == 1) return arr[0];
7546
7547 // select from multiple options based on frequency
7548 var pTotal = 0, selector = Math.random();
7549 for ( var i = 0; i < arr.length; i++) {
7550
7551 pTotal += arr[i].probability();
7552 if (selector < pTotal)
7553 return arr[i];
7554 }
7555 err("Invalid State in RiTa.probabalisticSelect()");
7556 },
7557
7558 addChild : function(newToken, initialCount) {
7559
7560 initialCount = initialCount || 1;
7561
7562 var key = this._key(newToken), node = this.children[key];
7563
7564 // add first instance of this token
7565 if (!node) {
7566 node = new TextNode(this, newToken);
7567 node.count = initialCount;
7568 this.children[key] = node;
7569 }
7570 else {
7571 node.count++;
7572 }
7573
7574 return node;
7575 },
7576
7577 asTree : function(sort) {
7578
7579 var s = this.token+" ";
7580 if (!this.isRoot())
7581 s+= "("+this.count+")->";
7582 s += "{";
7583 if (!this.isLeaf())
7584 return this.childrenToString(this, s, 1, sort);
7585 return s + "}";
7586 },
7587
7588 isRoot : function() {
7589
7590 return isNull(this.parent);
7591 },
7592
7593 isLeaf : function() {
7594
7595 return this.childCount() == 0;
7596 },
7597
7598 probability : function() {
7599
7600 //log('probability: '+ this.count+'/'+this.siblingCount());
7601 return this.count/this.siblingCount();
7602 },
7603
7604
7605 childNodes : function(regex) {
7606
7607 if (!this.children) return [];
7608
7609 regex = Type.is(regex,S) ? new RegExp(regex) : regex;
7610
7611 var res = [];
7612 for (var k in this.children) {
7613 var node = this.children[k];
7614 if (!regex || (node && node.token && node.token.search(regex)>-1)) {
7615 res.push(node);
7616 }
7617 }
7618
7619 return res;
7620 },
7621
7622 /**
7623 * Returns the number of siblings for this node (Note: is case-sensitive)
7624 */
7625 siblingCount : function() {
7626
7627 if (this.isRoot()) err("Illegal siblingCount on ROOT!");
7628
7629 if (!this.parent) err("Null parent for: "+this.token);
7630
7631 return this.parent.childCount();
7632 },
7633
7634 /**
7635 * Returns the number of unique children (Note: is case-sensitive)
7636 */
7637 uniqueCount : function() {
7638
7639 var sum = 0;
7640 for (var k in this.children) sum++;
7641 return sum;
7642 },
7643
7644 /**
7645 * Returns the number of children for this node (Note: is case-sensitive)
7646 */
7647 childCount : function() {
7648
7649 //return this.childNodes().length;
7650
7651 if (!this.children) return 0;
7652
7653 var sum = 0;
7654 for (var k in this.children) {
7655 if (k && this.children[k])
7656 sum += this.children[k].count;
7657 }
7658
7659 return sum;
7660 },
7661
7662
7663 /*
7664 * takes node or string, returns node
7665 */
7666 lookup : function(obj) {
7667
7668 if (!obj) return null;
7669
7670 obj = (typeof obj != S && obj.token) ? obj.token : obj;
7671
7672 //log(this.token+".lookup("+this._key(obj)+")");
7673
7674 return obj ? this.children[this._key(obj)] : null;
7675 },
7676
7677
7678 _key : function(str) {
7679
7680 return (str && TextNode.ignoreCase) ? str.toLowerCase() : str;
7681 },
7682
7683 childrenToString : function(textNode, str, depth, sort) {
7684
7685 var mn = textNode, l = [], node = null, indent = "\n";
7686
7687 sort = sort || false;
7688
7689 for (var k in textNode.children) {
7690 l.push(textNode.children[k]);
7691 }
7692
7693 if (!l.length) return str;
7694
7695 if (sort) l.sort();
7696
7697 for (var j = 0; j < depth; j++)
7698 indent += " ";
7699
7700 for (var i = 0; i < l.length; i++) {
7701
7702 node = l[i];
7703
7704 if (!node) break;
7705
7706 var tok = node.token;
7707 if (tok) {
7708 (tok == "\n") && (tok = "\\n");
7709 (tok == "\r") && (tok = "\\r");
7710 (tok == "\t") && (tok = "\\t");
7711 (tok == "\r\n") && (tok = "\\r\\n");
7712 }
7713
7714 str += indent +"'"+tok+"'";
7715
7716 if (!node.count)
7717 err("ILLEGAL FREQ: "+node.count+" -> "+mn.token+","+node.token);
7718
7719 if (!node.isRoot())
7720 str += " ["+node.count + ",p=" +//formatter.format
7721 (node.probability().toFixed(3)) + "]->{";
7722
7723 if (node.children)
7724 str = this.childrenToString(node, str, depth+1, sort);
7725 else
7726 str += "}";
7727 }
7728
7729 indent = "\n";
7730 for (var j = 0; j < depth-1; j++)
7731 indent += " ";
7732
7733 return str + indent + "}";
7734 },
7735
7736 toString : function() {
7737 return '[ '+this.token+" ("+this.count+'/'+this.probability().toFixed(3)+'%)]';
7738 }
7739 }
7740
7741 // ////////////////////////////////////////////////////////////
7742 // Conjugator
7743 // ////////////////////////////////////////////////////////////
7744
7745
7746 /**
7747 * @name Conjugator
7748 * @class
7749 * @private
7750 */
7751 var Conjugator = makeClass();
7752
7753 Conjugator.prototype = {
7754
7755 initialize : function() {
7756
7757 // TODO: get rid of these and make static method ?
7758
7759 this.perfect = this.progressive = this.passive = this.interrogative = false;
7760 this.tense = RiTa.PRESENT_TENSE;
7761 this.person = RiTa.FIRST_PERSON;
7762 this.number = RiTa.SINGULAR;
7763 this.form = RiTa.NORMAL;
7764 this.head = "";
7765
7766 },
7767
7768 // Conjugates the verb based on the current state of the conjugator.
7769 // !@# Removed (did not translate) incomplete/non-working java
7770 // implementation of modals handling.
7771 // !@# TODO: add handling of past tense modals.
7772 conjugate : function(verb, args) {
7773
7774 var s = E, actualModal = null, conjs = [], frontVG = verb, verbForm;
7775
7776 if (!verb || !verb.length) return E;
7777
7778 if (!args) return verb;
7779
7780 // ------------------ handle arguments ------------------
7781
7782 args.number && (this.number = args.number);
7783
7784 args.person && (this.person = args.person);
7785
7786 args.tense && (this.tense = args.tense);
7787
7788 args.form && (this.form = args.form);
7789
7790 args.passive && (this.person = args.passive);
7791
7792 args.progressive && (this.progressive = args.progressive);
7793
7794 args.perfect && (this.perfect = args.perfect);
7795
7796 // ----------------------- start ---------------------------
7797 if (this.form == RiTa.INFINITIVE) {
7798 actualModal = "to";
7799 }
7800
7801 if (this.tense == RiTa.FUTURE_TENSE) {
7802 actualModal = "will";
7803 }
7804
7805 if (this.passive) {
7806 this.conjs.push(this.getPastParticiple(this.frontVG));
7807 this.frontVG = "be"; // Conjugate this ?
7808 }
7809
7810 if (this.progressive) {
7811 conjs.push(this.getPresentParticiple(frontVG));
7812 frontVG = "be"; // Conjugate this ?
7813 }
7814
7815 if (this.perfect) {
7816 conjs.push(this.getPastParticiple(frontVG));
7817 frontVG = "have";
7818 }
7819
7820 if (actualModal) {
7821 // log("push: "+frontVG);
7822 conjs.push(frontVG);
7823 frontVG = null;
7824 }
7825
7826 // Now inflect frontVG (if it exists) and push it on restVG
7827 if (frontVG) {
7828
7829 if (this.form === RiTa.GERUND) { // gerund - use ING form
7830
7831 var pp = this.getPresentParticiple(frontVG);
7832
7833 // !@# not yet implemented! ??? WHAT?
7834 conjs.push(pp);
7835
7836 }
7837 else if (this.interrogative && !(verb == "be") && conjs.length < 1) {
7838
7839 conjs.push(frontVG);
7840
7841 }
7842 else {
7843
7844 verbForm = this.getVerbForm(frontVG, this.tense, this.person, this.number);
7845 conjs.push(verbForm);
7846 }
7847 }
7848
7849 // add modal, and we're done
7850 actualModal && conjs.push(actualModal);
7851
7852 var s = E;
7853 for ( var i = 0; i < conjs.length; i++) {
7854
7855 s = conjs[i] + " " + s;
7856 }
7857
7858 // !@# test this
7859 endsWith(s, "peted") && err("Unexpected output: " + this.toString());
7860
7861 return trim(s);
7862 },
7863
7864 checkRules : function(ruleSet, verb) {
7865
7866 var res, name = ruleSet.name, rules = ruleSet.rules, defRule = ruleSet.defaultRule || null;
7867
7868 if (!rules) err("no rule: "+ruleSet.name+' of '+verb);
7869
7870 if (inArray(MODALS, verb)) return verb;
7871
7872 for ( var i = 0; i < rules.length; i++) {
7873
7874 //log("checkRules2("+name+").fire("+i+")="+rules[i].regex);
7875 if (rules[i].applies(verb)) {
7876
7877 var got = rules[i].fire(verb);
7878
7879 //log("HIT("+name+").fire("+i+")="+rules[i].regex+"_returns: "+got);
7880 return got;
7881 }
7882 }
7883
7884 if (ruleSet.doubling || inArray(VERB_CONS_DOUBLING, verb)) {
7885
7886 verb = this.doubleFinalConsonant(verb);
7887 }
7888
7889 res = defRule.fire(verb);
7890
7891 // log("checkRules3("+name+").returns: "+res);
7892 return res;
7893 },
7894
7895 doubleFinalConsonant : function(word) {
7896 var letter = word.charAt(word.length - 1);
7897 return word + letter;
7898 },
7899
7900 getPast : function(verb, pers, numb) {
7901
7902 if (verb.toLowerCase() == "be") {
7903
7904 switch (numb) {
7905
7906 case RiTa.SINGULAR:
7907
7908 switch (pers) {
7909
7910 case RiTa.FIRST_PERSON:
7911 break;
7912
7913 case RiTa.THIRD_PERSON:
7914 return "was";
7915
7916 case RiTa.SECOND_PERSON:
7917 return "were";
7918
7919 }
7920 break;
7921
7922 case RiTa.PLURAL:
7923
7924 return "were";
7925 }
7926 }
7927
7928 var got = this.checkRules(PAST_TENSE_RULESET, verb);
7929
7930 //log("getPast(" + verb + ").returns: " + got);
7931
7932 return got;
7933 },
7934
7935 getPresent : function(verb, person, number) {
7936
7937 person = person || this.person;
7938 number = number || this.number;
7939
7940 if ((person == RiTa.THIRD_PERSON) && (number == RiTa.SINGULAR)) {
7941
7942 return this.checkRules(PRESENT_TENSE_RULESET, verb);
7943 }
7944 else if (verb == "be") {
7945
7946 if (number == RiTa.SINGULAR) {
7947
7948 switch (person) {
7949
7950 case RiTa.FIRST_PERSON:
7951 return "am";
7952
7953 case RiTa.SECOND_PERSON:
7954 return "are";
7955
7956 case RiTa.THIRD_PERSON:
7957 return "is";
7958
7959 // default: ???
7960 }
7961
7962 } else {
7963 return "are";
7964 }
7965 }
7966 return verb;
7967 },
7968
7969 getPresentParticiple : function(verb) {
7970
7971 return strOk(verb) ? this.checkRules(PRESENT_PARTICIPLE_RULESET, verb) : E;
7972 },
7973
7974 getPastParticiple : function(verb) {
7975
7976 return strOk(verb) ? this.checkRules(PAST_PARTICIPLE_RULESET, verb) : E;
7977 },
7978
7979 getVerbForm : function(verb, tense, person, number) {
7980
7981 switch (tense) {
7982
7983 case RiTa.PRESENT_TENSE:
7984 return this.getPresent(verb, person, number);
7985
7986 case RiTa.PAST_TENSE:
7987 return this.getPast(verb, person, number);
7988
7989 default:
7990 return verb;
7991 }
7992 },
7993
7994 // Returns a String representing the current person from one of
7995 // (first, second, third)
7996 getPerson : function() {
7997 return CONJUGATION_NAMES[this.person];
7998 },
7999
8000 // Returns a String representing the current number from one of
8001 // (singular, plural)
8002 getNumber : function() {
8003 return CONJUGATION_NAMES[this.number];
8004 },
8005
8006 // Returns a String representing the current tense from one of
8007 // (past, present, future)
8008 getTense : function() {
8009 return CONJUGATION_NAMES[this.tense];
8010 },
8011
8012 // Returns the current verb
8013 getVerb : function() {
8014 return this.head;
8015 },
8016
8017 // Returns whether the conjugation will use passive tense
8018 isPassive : function() {
8019 return this.passive;
8020 },
8021 // Returns whether the conjugation will use perfect tense
8022 isPerfect : function() {
8023 return this.perfect;
8024 },
8025 // Returns whether the conjugation will use progressive tense
8026 isProgressive : function() {
8027 return this.progressive;
8028 },
8029
8030 // Sets the person for the conjugation, from one of the
8031 // constants: [RiTa.FIRST_PERSON, RiTa.SECOND_PERSON, RiTa.THIRD_PERSON]
8032 setPerson : function(personConstant) {
8033 this.person = personConstant;
8034 },
8035
8036 // Sets the number for the conjugation, from one of the
8037 // constants: [RiTa.SINGULAR, RiTa.PLURAL]
8038 setNumber : function(numberConstant) {
8039 this.number = numberConstant;
8040 },
8041
8042 // Sets the tense for the conjugation, from one of the
8043 // constants: [RiTa.PAST_TENSE, RiTa.PRESENT_TENSE, RiTa.FUTURE_TENSE]
8044 setTense : function(tenseConstant) {
8045 this.tense = tenseConstant;
8046 },
8047
8048 // Sets the verb to be conjugated
8049 setVerb : function(verb) {
8050 var v = this.head = verb.toLowerCase();
8051 if (v === "am" || v === "are" || v === "is" || v === "was" || v === "were") {
8052 this.head = "be";
8053 }
8054 },
8055
8056 // Sets whether the conjugation should use passive tense
8057 setPassive : function(bool) {
8058 this.passive = bool;
8059 },
8060
8061 // Sets whether the conjugation should use perfect tense
8062 setPerfect : function(bool) {
8063 this.perfect = bool;
8064 },
8065
8066 // Sets whether the conjugation should use progressive tense
8067 setProgressive : function(bool) {
8068 this.progressive = bool;
8069 },
8070
8071 // A human-readable representation of state for logging
8072 toString : function() {
8073 return " ---------------------\n" + " Passive = " + this.isPassive() + "\n"
8074 + " Perfect = " + this.isPerfect() + "\n" + " Progressive = "
8075 + this.isProgressive() + "\n" + " ---------------------\n" + " Number = "
8076 + this.getNumber() + "\n" + " Person = " + this.getPerson() + "\n"
8077 + " Tense = " + this.getTense() + "\n" + " ---------------------\n";
8078 },
8079
8080 // Returns all possible conjugations of the specified verb
8081 // (contains duplicates) (TODO: remove? not sure about this one)
8082 conjugateAll : function(verb) {
8083
8084 var results = [], i, j, k, l, m, n;
8085
8086 this.setVerb(verb);
8087
8088 for (i = 0; i < TENSES.length; i++) {
8089 this.setTense(TENSES[i]);
8090 for (j = 0; j < NUMBERS.length; j++) {
8091 this.setNumber(NUMBERS[j]);
8092 for (k = 0; k < PERSONS.length; k++) {
8093 this.setPerson(PERSONS[k]);
8094 for (l = 0; l < 2; l++) {
8095 this.setPassive(l == 0 ? true : false);
8096 for (m = 0; m < 2; m++) {
8097 this.setProgressive(m == 0 ? true : false);
8098 for (n = 0; n < 2; n++) {
8099 this.setPerfect(n == 0 ? true : false);
8100 results.push(this.conjugate(verb));
8101 }
8102 }
8103 }
8104 }
8105 }
8106 }
8107 // log("all="+results.length);
8108 return results;
8109 }
8110 }
8111
8112 // ////////////////////////////////////////////////////////////
8113 // PosTagger (singleton)
8114 // ////////////////////////////////////////////////////////////
8115
8116 var PosTagger = {
8117
8118 // Penn Pos types ------------------------------
8119 UNKNOWN : [ "???", "UNKNOWN" ],
8120 N : [ "N", "NOUN_KEY" ],
8121 V : [ "V", "VERB_KEY" ],
8122 R : [ "R", "ADVERB_KEY" ],
8123 A : [ "A", "ADJECTIVE_KEY" ],
8124 CC : [ "CC", "Coordinating conjunction" ],
8125 CD : [ "CD", "Cardinal number" ],
8126 DT : [ "DT", "Determiner" ],
8127 EX : [ "EX", "Existential there" ],
8128 FW : [ "FW", "Foreign word" ],
8129 IN : [ "IN", "Preposition or subordinating conjunction" ],
8130 JJ : [ "JJ", "Adjective" ],
8131 JJR : [ "JJR", "Adjective, comparative" ],
8132 JJS : [ "JJS", "Adjective, superlative" ],
8133 LS : [ "LS", "List item marker" ],
8134 MD : [ "MD", "Modal" ],
8135 NN : [ "NN", "Noun, singular or mass" ],
8136 NNS : [ "NNS", "Noun, plural" ],
8137 NNP : [ "NNP", "Proper noun, singular" ],
8138 NNPS : [ "NNPS", "Proper noun, plural" ],
8139 PDT : [ "PDT", "Predeterminer" ],
8140 POS : [ "POS", "Possessive ending" ],
8141 PRP : [ "PRP", "Personal pronoun" ],
8142 PRP$ : [ "PRP$", "Possessive pronoun (prolog version PRP-S)" ],
8143 RB : [ "RB", "Adverb" ],
8144 RBR : [ "RBR", "Adverb, comparative" ],
8145 RBS : [ "RBS", "Adverb, superlative" ],
8146 RP : [ "RP", "Particle" ],
8147 SYM : [ "SYM", "Symbol" ],
8148 TO : [ "TO", "to" ],
8149 UH : [ "UH", "Interjection" ],
8150 VB : [ "VB", "Verb, base form" ],
8151 VBD : [ "VBD", "Verb, past tense" ],
8152 VBG : [ "VBG", "Verb, gerund or present participle" ],
8153 VBN : [ "VBN", "Verb, past participle" ],
8154 VBP : [ "VBP", "Verb, non-3rd person singular present" ],
8155 VBZ : [ "VBZ", "Verb, 3rd person singular present" ],
8156 WDT : [ "WDT", "Wh-determiner" ],
8157 WP : [ "WP", "Wh-pronoun" ],
8158 WP$ : [ "WP$", "Possessive wh-pronoun (prolog version WP-S)" ],
8159 WRB : [ "WRB", "Wh-adverb" ],
8160
8161 TAGS : [ "CC", "CD", "DT", "EX", "FW", "IN", "JJ",
8162 "JJR", "JJS", "LS", "MD", "NN", "NNS", "NNP",
8163 "NNPS", "PDT", "POS", "PRP", "PRP$", "RB",
8164 "RBR", "RBS", "RP", "SYM", "TO",
8165 "UH", "VB", "VBD", "VBG", "VBN", "VBP", "VBZ", "WDT",
8166 "WP", "WP$", "WRB", "UNKNOWN" ],
8167 NOUNS : [ "NN", "NNS", "NNP", "NNPS" ],
8168 VERBS : [ "VB", "VBD", "VBG", "VBN", "VBP", "VBZ" ],
8169 ADJ : [ "JJ", "JJR", "JJS" ],
8170 ADV : [ "RB", "RBR", "RBS", "RP" ],
8171
8172
8173 isVerb : function(tag) {
8174 //return inArray(this.VERBS, tag);
8175 return inArray(this.VERBS, tag.toUpperCase());
8176 },
8177
8178 isNoun : function(tag) {
8179 //return inArray(this.NOUNS, tag);
8180 return inArray(this.NOUNS, tag.toUpperCase());
8181 },
8182
8183 isAdverb : function(tag) {
8184 //return inArray(this.ADV, tag);
8185 return inArray(this.ADV, tag.toUpperCase());
8186 },
8187
8188 isAdj : function(tag) {
8189 //return inArray(this.ADJ, tag);
8190 return inArray(this.ADJ, tag.toUpperCase());
8191 },
8192
8193 isTag : function(tag) {
8194 return inArray(this.TAGS, tag);
8195 },
8196
8197 hasTag : function(choices, tag) {
8198 var choiceStr = choices.join();
8199 return (choiceStr.indexOf(tag) > -1);
8200 },
8201
8202 /**
8203 * Returns an array of parts-of-speech from the Penn tagset,
8204 * each corresponding to one word of input
8205 */
8206 tag : function(words) {
8207
8208
8209 var result = [], choices = [], lex = RiLexicon._getInstance();
8210
8211 words = Type.is(words,A) ? words : [ words ];
8212
8213 for (var i = 0, l = words.length; i < l; i++) {
8214
8215 if (!strOk(words[i])) continue
8216
8217 var data = lex._getPosArr(words[i]);
8218
8219 if (isNull(data) || data.length == 0) {
8220
8221 if (words[i].length == 1) {
8222
8223 result.push(isNum(words[i].charAt(0)) ? "cd" : words[i]);
8224 }
8225 else {
8226
8227 result.push("nn");
8228 }
8229 choices[i] = null; // TODO: OK?
8230 }
8231 else {
8232 result.push(data[0]);
8233 choices.push(data);
8234 }
8235 }
8236
8237 // Adjust pos according to transformation rules
8238 return this._applyContext(words, result, choices);
8239
8240 },
8241
8242
8243 // Applies a customized subset of the Brill transformations
8244 _applyContext : function(words, result, choices) {
8245
8246 //log("_applyContext("+words+","+result+","+choices+")");
8247
8248 // Shortcuts for brevity/readability
8249 var sW = startsWith, eW = endsWith, PRINT_CUSTOM_TAGS = true, PRINT = PRINT_CUSTOM_TAGS;
8250
8251 // Apply transformations
8252 for (var i = 0, l = words.length; i < l; i++) {
8253
8254 var firstLetter = words[i].charAt(0);
8255
8256 // transform 1: DT, {VBD | VBP | VB} --> DT, NN
8257 if (i > 0 && (result[i - 1] == "dt")) {
8258 if (sW(result[i], "vb")) {
8259 if (PRINT) {
8260 log("BrillPosTagger: changing verb to noun: " + words[i]);
8261 }
8262 result[i] = "nn";
8263 }
8264
8265 // transform 1: DT, {RB | RBR | RBS} --> DT, {JJ |
8266 // JJR | JJS}
8267 else if (sW(result[i], "rb")) {
8268 if (PRINT) {
8269 log("BrillPosTagger: custom tagged '" + words[i] + "', "
8270 + result[i]);
8271 }
8272 result[i] = (result[i].length > 2) ? "jj" + result[i].charAt(2) : "jj";
8273 if (PRINT) {
8274 log(" -> " + result[i]);
8275 }
8276 }
8277 }
8278
8279 // transform 2: convert a noun to a number (cd) if it is
8280 // all digits and/or a decimal "."
8281 if (sW(result[i], "n") && choices[i] == null) {
8282 if (isNum(words[i])) {
8283 result[i] = "cd";
8284 } // mods: dch (add choice check above) <---- ? >
8285 }
8286
8287 // transform 3: convert a noun to a past participle if
8288 // words[i] ends with "ed"
8289 if (sW(result[i], "n") && eW(words[i], "ed")) {
8290 result[i] = "vbn";
8291 }
8292
8293 // transform 4: convert any type to adverb if it ends in
8294 // "ly";
8295 if (eW(words[i], "ly")) {
8296 result[i] = "rb";
8297 }
8298
8299 // transform 5: convert a common noun (NN or NNS) to a
8300 // adjective if it ends with "al"
8301 if (sW(result[i], "nn") && eW(words[i], "al")) {
8302 result[i] = "jj";
8303 }
8304
8305 // transform 6: convert a noun to a verb if the
8306 // preceeding word is "would"
8307 if (i > 0 && sW(result[i], "nn") && equalsIgnoreCase(words[i - 1], "would")) {
8308 result[i] = "vb";
8309 }
8310
8311 // transform 7: if a word has been categorized as a
8312 // common noun and it ends
8313 // with "s", then set its type to plural common noun
8314 // (NNS)
8315 if ((result[i] == "nn") && eW(words[i], "s")) {
8316 result[i] = "nns";
8317 }
8318
8319 // transform 8: convert a common noun to a present
8320 // participle verb (i.e., a gerund)
8321 if (sW(result[i], "nn") && eW(words[i], "ing")) {
8322 // fix here -- add check on choices for any verb: eg
8323 // 'morning'
8324 if (this.hasTag(choices[i], "vb")) {
8325 result[i] = "vbg";
8326 } else if (PRINT) {
8327 log("[RiTa] BrillPosTagger tagged '" + words[i] + "' as " + result[i]);
8328 }
8329 }
8330
8331 // transform 9(dch): convert common nouns to proper
8332 // nouns when they start w' a capital and are not a
8333 // sentence start
8334 if (i > 0 && sW(result[i], "nn") && words[i].length > 1
8335 && (firstLetter == firstLetter.toUpperCase())) {
8336 result[i] = eW(result[i], "s") ? "nnps" : "nnp";
8337 }
8338
8339 // transform 10(dch): convert plural nouns (which are
8340 // also 3sg-verbs) to 3sg-verbs when followed by adverb
8341 // (jumps, dances)
8342 if (i < result.length - 1 && result[i] == "nns" && sW(result[i + 1], "rb")
8343 && this.hasTag(choices[i], "vbz")) {
8344 result[i] = "vbz";
8345 }
8346 }
8347
8348 return result;
8349
8350 }//.returns(A)
8351
8352 }// end PosTagger
8353
8354 /**
8355 * @name Stemmer
8356 * @class
8357 * @private
8358 */
8359 var Stemmer = {};
8360
8361 /**
8362 * Porter stemmer in Javascript: from https://github.com/kristopolous/Porter-Stemmer
8363 * Ported from Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14,
8364 * no. 3, pp 130-137, see also http:www.tartarus.org/~martin/PorterStemmer
8365 */
8366 Stemmer.stem_Porter = (function() {
8367
8368 var step2list = {
8369 "ational" : "ate",
8370 "tional" : "tion",
8371 "enci" : "ence",
8372 "anci" : "ance",
8373 "izer" : "ize",
8374 "bli" : "ble",
8375 "alli" : "al",
8376 "entli" : "ent",
8377 "eli" : "e",
8378 "ousli" : "ous",
8379 "ization" : "ize",
8380 "ation" : "ate",
8381 "ator" : "ate",
8382 "alism" : "al",
8383 "iveness" : "ive",
8384 "fulness" : "ful",
8385 "ousness" : "ous",
8386 "aliti" : "al",
8387 "iviti" : "ive",
8388 "biliti" : "ble",
8389 "logi" : "log"
8390 },
8391
8392 step3list = {
8393 "icate" : "ic",
8394 "ative" : "",
8395 "alize" : "al",
8396 "iciti" : "ic",
8397 "ical" : "ic",
8398 "ful" : "",
8399 "ness" : ""
8400 },
8401
8402 c = "[^aeiou]", // consonant
8403 v = "[aeiouy]", // vowel
8404 C = c + "[^aeiouy]*", // consonant sequence
8405 V = v + "[aeiou]*", // vowel sequence
8406
8407 mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0
8408 meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1
8409 mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1
8410 s_v = "^(" + C + ")?" + v; // vowel in stem
8411
8412 return function (w) {
8413 var stem,
8414 suffix,
8415 firstch,
8416 re,
8417 re2,
8418 re3,
8419 re4,
8420 origword = w;
8421
8422 if (w.length < 3) { return w; }
8423
8424 firstch = w.substr(0,1);
8425 if (firstch == "y") {
8426 w = firstch.toUpperCase() + w.substr(1);
8427 }
8428
8429 // Step 1a
8430 re = /^(.+?)(ss|i)es$/;
8431 re2 = /^(.+?)([^s])s$/;
8432
8433 if (re.test(w)) { w = w.replace(re,"$1$2"); }
8434 else if (re2.test(w)) { w = w.replace(re2,"$1$2"); }
8435
8436 // Step 1b
8437 re = /^(.+?)eed$/;
8438 re2 = /^(.+?)(ed|ing)$/;
8439 if (re.test(w)) {
8440 var fp = re.exec(w);
8441 re = new RegExp(mgr0);
8442 if (re.test(fp[1])) {
8443 re = /.$/;
8444 w = w.replace(re,"");
8445 }
8446 } else if (re2.test(w)) {
8447 var fp = re2.exec(w);
8448 stem = fp[1];
8449 re2 = new RegExp(s_v);
8450 if (re2.test(stem)) {
8451 w = stem;
8452 re2 = /(at|bl|iz)$/;
8453 re3 = new RegExp("([^aeiouylsz])\\1$");
8454 re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
8455 if (re2.test(w)) { w = w + "e"; }
8456 else if (re3.test(w)) { re = /.$/; w = w.replace(re,""); }
8457 else if (re4.test(w)) { w = w + "e"; }
8458 }
8459 }
8460
8461 // Step 1c
8462 re = /^(.+?)y$/;
8463 if (re.test(w)) {
8464 var fp = re.exec(w);
8465 stem = fp[1];
8466 re = new RegExp(s_v);
8467 if (re.test(stem)) { w = stem + "i"; }
8468 }
8469
8470 // Step 2
8471 re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
8472 if (re.test(w)) {
8473 var fp = re.exec(w);
8474 stem = fp[1];
8475 suffix = fp[2];
8476 re = new RegExp(mgr0);
8477 if (re.test(stem)) {
8478 w = stem + step2list[suffix];
8479 }
8480 }
8481
8482 // Step 3
8483 re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
8484 if (re.test(w)) {
8485 var fp = re.exec(w);
8486 stem = fp[1];
8487 suffix = fp[2];
8488 re = new RegExp(mgr0);
8489 if (re.test(stem)) {
8490 w = stem + step3list[suffix];
8491 }
8492 }
8493
8494 // Step 4
8495 re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
8496 re2 = /^(.+?)(s|t)(ion)$/;
8497 if (re.test(w)) {
8498 var fp = re.exec(w);
8499 stem = fp[1];
8500 re = new RegExp(mgr1);
8501 if (re.test(stem)) {
8502 w = stem;
8503 }
8504 } else if (re2.test(w)) {
8505 var fp = re2.exec(w);
8506 stem = fp[1] + fp[2];
8507 re2 = new RegExp(mgr1);
8508 if (re2.test(stem)) {
8509 w = stem;
8510 }
8511 }
8512
8513 // Step 5
8514 re = /^(.+?)e$/;
8515 if (re.test(w)) {
8516 var fp = re.exec(w);
8517 stem = fp[1];
8518 re = new RegExp(mgr1);
8519 re2 = new RegExp(meq1);
8520 re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
8521 if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {
8522 w = stem;
8523 }
8524 }
8525
8526 re = /ll$/;
8527 re2 = new RegExp(mgr1);
8528 if (re.test(w) && re2.test(w)) {
8529 re = /.$/;
8530 w = w.replace(re,"");
8531 }
8532
8533 // and turn initial Y back to y
8534
8535 if (firstch == "y") {
8536 w = firstch.toLowerCase() + w.substr(1);
8537 }
8538
8539 return w;
8540 }
8541 })();
8542
8543 Stemmer.stem_Lancaster = (function() {
8544
8545 function accept(token) {
8546
8547 return (token.match(/^[aeiou]/)) ?
8548 (token.length > 1) : (token.length > 2 && token.match(/[aeiouy]/));
8549 }
8550
8551 // take a token, look up the applicable rule and do the stem
8552 function applyRules(token, intact) {
8553
8554 var section = token.substr( - 1), rules = ruleTable[section];
8555
8556 if (rules) {
8557
8558 for (var i = 0; i < rules.length; i++) {
8559
8560 // only apply intact rules to intact tokens
8561 if ((intact || !rules[i].intact) && token.substr(0 - rules[i].pattern.length) == rules[i].pattern) {
8562
8563 // hack off only as much as the rule indicates
8564 var result = token.substr(0, token.length - rules[i].size);
8565
8566 // if the rules wants us to apply an appendage do so
8567 if (rules[i].appendage)
8568 result += rules[i].appendage;
8569
8570 if (accept(result)) {
8571 token = result;
8572
8573 // see what the rules wants to do next
8574 if (rules[i].continuation) {
8575 // this rule thinks there still might be stem left. keep at it.
8576 // since we've applied a change we'll pass false in for intact
8577 return applyRules(result, false);
8578
8579 } else {
8580
8581 // the rule thinks we're done stemming. drop out.
8582 return result;
8583 }
8584 }
8585 }
8586 }
8587 }
8588 else
8589 err('No rules found!');
8590
8591 return token;
8592 }
8593
8594 var ruleTable = {
8595 "a": [
8596 {
8597 "continuation": false,
8598 "intact": true,
8599 "pattern": "ia",
8600 "size": "2"
8601 },
8602 {
8603 "continuation": false,
8604 "intact": true,
8605 "pattern": "a",
8606 "size": "1"
8607 }
8608 ],
8609 "b": [
8610 {
8611 "continuation": false,
8612 "intact": false,
8613 "pattern": "bb",
8614 "size": "1"
8615 }
8616 ],
8617 "c": [
8618 {
8619 "appendage": "s",
8620 "continuation": false,
8621 "intact": false,
8622 "pattern": "ytic",
8623 "size": "3"
8624 },
8625 {
8626 "continuation": true,
8627 "intact": false,
8628 "pattern": "ic",
8629 "size": "2"
8630 },
8631 {
8632 "appendage": "t",
8633 "continuation": true,
8634 "intact": false,
8635 "pattern": "nc",
8636 "size": "1"
8637 }
8638 ],
8639 "d": [
8640 {
8641 "continuation": false,
8642 "intact": false,
8643 "pattern": "dd",
8644 "size": "1"
8645 },
8646 {
8647 "appendage": "y",
8648 "continuation": true,
8649 "intact": false,
8650 "pattern": "ied",
8651 "size": "3"
8652 },
8653 {
8654 "appendage": "s",
8655 "continuation": false,
8656 "intact": false,
8657 "pattern": "ceed",
8658 "size": "2"
8659 },
8660 {
8661 "continuation": false,
8662 "intact": false,
8663 "pattern": "eed",
8664 "size": "1"
8665 },
8666 {
8667 "continuation": true,
8668 "intact": false,
8669 "pattern": "ed",
8670 "size": "2"
8671 },
8672 {
8673 "continuation": true,
8674 "intact": false,
8675 "pattern": "hood",
8676 "size": "4"
8677 }
8678 ],
8679 "e": [
8680 {
8681 "continuation": true,
8682 "intact": false,
8683 "pattern": "e",
8684 "size": "1"
8685 }
8686 ],
8687 "f": [
8688 {
8689 "appendage": "v",
8690 "continuation": false,
8691 "intact": false,
8692 "pattern": "lief",
8693 "size": "1"
8694 },
8695 {
8696 "continuation": true,
8697 "intact": false,
8698 "pattern": "if",
8699 "size": "2"
8700 }
8701 ],
8702 "g": [
8703 {
8704 "continuation": true,
8705 "intact": false,
8706 "pattern": "ing",
8707 "size": "3"
8708 },
8709 {
8710 "appendage": "y",
8711 "continuation": false,
8712 "intact": false,
8713 "pattern": "iag",
8714 "size": "3"
8715 },
8716 {
8717 "continuation": true,
8718 "intact": false,
8719 "pattern": "ag",
8720 "size": "2"
8721 },
8722 {
8723 "continuation": false,
8724 "intact": false,
8725 "pattern": "gg",
8726 "size": "1"
8727 }
8728 ],
8729 "h": [
8730 {
8731 "continuation": false,
8732 "intact": true,
8733 "pattern": "th",
8734 "size": "2"
8735 },
8736 {
8737 "appendage": "c",
8738 "continuation": false,
8739 "intact": false,
8740 "pattern": "guish",
8741 "size": "5"
8742 },
8743 {
8744 "continuation": true,
8745 "intact": false,
8746 "pattern": "ish",
8747 "size": "3"
8748 }
8749 ],
8750 "i": [
8751 {
8752 "continuation": false,
8753 "intact": true,
8754 "pattern": "i",
8755 "size": "1"
8756 },
8757 {
8758 "appendage": "y",
8759 "continuation": true,
8760 "intact": false,
8761 "pattern": "i",
8762 "size": "1"
8763 }
8764 ],
8765 "j": [
8766 {
8767 "appendage": "d",
8768 "continuation": false,
8769 "intact": false,
8770 "pattern": "ij",
8771 "size": "1"
8772 },
8773 {
8774 "appendage": "s",
8775 "continuation": false,
8776 "intact": false,
8777 "pattern": "fuj",
8778 "size": "1"
8779 },
8780 {
8781 "appendage": "d",
8782 "continuation": false,
8783 "intact": false,
8784 "pattern": "uj",
8785 "size": "1"
8786 },
8787 {
8788 "appendage": "d",
8789 "continuation": false,
8790 "intact": false,
8791 "pattern": "oj",
8792 "size": "1"
8793 },
8794 {
8795 "appendage": "r",
8796 "continuation": false,
8797 "intact": false,
8798 "pattern": "hej",
8799 "size": "1"
8800 },
8801 {
8802 "appendage": "t",
8803 "continuation": false,
8804 "intact": false,
8805 "pattern": "verj",
8806 "size": "1"
8807 },
8808 {
8809 "appendage": "t",
8810 "continuation": false,
8811 "intact": false,
8812 "pattern": "misj",
8813 "size": "2"
8814 },
8815 {
8816 "appendage": "d",
8817 "continuation": false,
8818 "intact": false,
8819 "pattern": "nj",
8820 "size": "1"
8821 },
8822 {
8823 "appendage": "s",
8824 "continuation": false,
8825 "intact": false,
8826 "pattern": "j",
8827 "size": "1"
8828 }
8829 ],
8830 "l": [
8831 {
8832 "continuation": false,
8833 "intact": false,
8834 "pattern": "ifiabl",
8835 "size": "6"
8836 },
8837 {
8838 "appendage": "y",
8839 "continuation": false,
8840 "intact": false,
8841 "pattern": "iabl",
8842 "size": "4"
8843 },
8844 {
8845 "continuation": true,
8846 "intact": false,
8847 "pattern": "abl",
8848 "size": "3"
8849 },
8850 {
8851 "continuation": false,
8852 "intact": false,
8853 "pattern": "ibl",
8854 "size": "3"
8855 },
8856 {
8857 "appendage": "l",
8858 "continuation": true,
8859 "intact": false,
8860 "pattern": "bil",
8861 "size": "2"
8862 },
8863 {
8864 "continuation": false,
8865 "intact": false,
8866 "pattern": "cl",
8867 "size": "1"
8868 },
8869 {
8870 "appendage": "y",
8871 "continuation": false,
8872 "intact": false,
8873 "pattern": "iful",
8874 "size": "4"
8875 },
8876 {
8877 "continuation": true,
8878 "intact": false,
8879 "pattern": "ful",
8880 "size": "3"
8881 },
8882 {
8883 "continuation": false,
8884 "intact": false,
8885 "pattern": "ul",
8886 "size": "2"
8887 },
8888 {
8889 "continuation": true,
8890 "intact": false,
8891 "pattern": "ial",
8892 "size": "3"
8893 },
8894 {
8895 "continuation": true,
8896 "intact": false,
8897 "pattern": "ual",
8898 "size": "3"
8899 },
8900 {
8901 "continuation": true,
8902 "intact": false,
8903 "pattern": "al",
8904 "size": "2"
8905 },
8906 {
8907 "continuation": false,
8908 "intact": false,
8909 "pattern": "ll",
8910 "size": "1"
8911 }
8912 ],
8913 "m": [
8914 {
8915 "continuation": false,
8916 "intact": false,
8917 "pattern": "ium",
8918 "size": "3"
8919 },
8920 {
8921 "continuation": false,
8922 "intact": true,
8923 "pattern": "um",
8924 "size": "2"
8925 },
8926 {
8927 "continuation": true,
8928 "intact": false,
8929 "pattern": "ism",
8930 "size": "3"
8931 },
8932 {
8933 "continuation": false,
8934 "intact": false,
8935 "pattern": "mm",
8936 "size": "1"
8937 }
8938 ],
8939 "n": [
8940 {
8941 "appendage": "j",
8942 "continuation": true,
8943 "intact": false,
8944 "pattern": "sion",
8945 "size": "4"
8946 },
8947 {
8948 "appendage": "c",
8949 "continuation": false,
8950 "intact": false,
8951 "pattern": "xion",
8952 "size": "4"
8953 },
8954 {
8955 "continuation": true,
8956 "intact": false,
8957 "pattern": "ion",
8958 "size": "3"
8959 },
8960 {
8961 "continuation": true,
8962 "intact": false,
8963 "pattern": "ian",
8964 "size": "3"
8965 },
8966 {
8967 "continuation": true,
8968 "intact": false,
8969 "pattern": "an",
8970 "size": "2"
8971 },
8972 {
8973 "continuation": false,
8974 "intact": false,
8975 "pattern": "een",
8976 "size": "0"
8977 },
8978 {
8979 "continuation": true,
8980 "intact": false,
8981 "pattern": "en",
8982 "size": "2"
8983 },
8984 {
8985 "continuation": false,
8986 "intact": false,
8987 "pattern": "nn",
8988 "size": "1"
8989 }
8990 ],
8991 "p": [
8992 {
8993 "continuation": true,
8994 "intact": false,
8995 "pattern": "ship",
8996 "size": "4"
8997 },
8998 {
8999 "continuation": false,
9000 "intact": false,
9001 "pattern": "pp",
9002 "size": "1"
9003 }
9004 ],
9005 "r": [
9006 {
9007 "continuation": true,
9008 "intact": false,
9009 "pattern": "er",
9010 "size": "2"
9011 },
9012 {
9013 "continuation": false,
9014 "intact": false,
9015 "pattern": "ear",
9016 "size": "0"
9017 },
9018 {
9019 "continuation": false,
9020 "intact": false,
9021 "pattern": "ar",
9022 "size": "2"
9023 },
9024 {
9025 "continuation": true,
9026 "intact": false,
9027 "pattern": "or",
9028 "size": "2"
9029 },
9030 {
9031 "continuation": true,
9032 "intact": false,
9033 "pattern": "ur",
9034 "size": "2"
9035 },
9036 {
9037 "continuation": false,
9038 "intact": false,
9039 "pattern": "rr",
9040 "size": "1"
9041 },
9042 {
9043 "continuation": true,
9044 "intact": false,
9045 "pattern": "tr",
9046 "size": "1"
9047 },
9048 {
9049 "appendage": "y",
9050 "continuation": true,
9051 "intact": false,
9052 "pattern": "ier",
9053 "size": "3"
9054 }
9055 ],
9056 "s": [
9057 {
9058 "appendage": "y",
9059 "continuation": true,
9060 "intact": false,
9061 "pattern": "ies",
9062 "size": "3"
9063 },
9064 {
9065 "continuation": false,
9066 "intact": false,
9067 "pattern": "sis",
9068 "size": "2"
9069 },
9070 {
9071 "continuation": true,
9072 "intact": false,
9073 "pattern": "is",
9074 "size": "2"
9075 },
9076 {
9077 "continuation": true,
9078 "intact": false,
9079 "pattern": "ness",
9080 "size": "4"
9081 },
9082 {
9083 "continuation": false,
9084 "intact": false,
9085 "pattern": "ss",
9086 "size": "0"
9087 },
9088 {
9089 "continuation": true,
9090 "intact": false,
9091 "pattern": "ous",
9092 "size": "3"
9093 },
9094 {
9095 "continuation": false,
9096 "intact": true,
9097 "pattern": "us",
9098 "size": "2"
9099 },
9100 {
9101 "continuation": true,
9102 "intact": true,
9103 "pattern": "s",
9104 "size": "1"
9105 },
9106 {
9107 "continuation": false,
9108 "intact": false,
9109 "pattern": "s",
9110 "size": "0"
9111 }
9112 ],
9113 "t": [
9114 {
9115 "appendage": "y",
9116 "continuation": false,
9117 "intact": false,
9118 "pattern": "plicat",
9119 "size": "4"
9120 },
9121 {
9122 "continuation": true,
9123 "intact": false,
9124 "pattern": "at",
9125 "size": "2"
9126 },
9127 {
9128 "continuation": true,
9129 "intact": false,
9130 "pattern": "ment",
9131 "size": "4"
9132 },
9133 {
9134 "continuation": true,
9135 "intact": false,
9136 "pattern": "ent",
9137 "size": "3"
9138 },
9139 {
9140 "continuation": true,
9141 "intact": false,
9142 "pattern": "ant",
9143 "size": "3"
9144 },
9145 {
9146 "appendage": "b",
9147 "continuation": false,
9148 "intact": false,
9149 "pattern": "ript",
9150 "size": "2"
9151 },
9152 {
9153 "appendage": "b",
9154 "continuation": false,
9155 "intact": false,
9156 "pattern": "orpt",
9157 "size": "2"
9158 },
9159 {
9160 "continuation": false,
9161 "intact": false,
9162 "pattern": "duct",
9163 "size": "1"
9164 },
9165 {
9166 "continuation": false,
9167 "intact": false,
9168 "pattern": "sumpt",
9169 "size": "2"
9170 },
9171 {
9172 "appendage": "i",
9173 "continuation": false,
9174 "intact": false,
9175 "pattern": "cept",
9176 "size": "2"
9177 },
9178 {
9179 "appendage": "v",
9180 "continuation": false,
9181 "intact": false,
9182 "pattern": "olut",
9183 "size": "2"
9184 },
9185 {
9186 "continuation": false,
9187 "intact": false,
9188 "pattern": "sist",
9189 "size": "0"
9190 },
9191 {
9192 "continuation": true,
9193 "intact": false,
9194 "pattern": "ist",
9195 "size": "3"
9196 },
9197 {
9198 "continuation": false,
9199 "intact": false,
9200 "pattern": "tt",
9201 "size": "1"
9202 }
9203 ],
9204 "u": [
9205 {
9206 "continuation": false,
9207 "intact": false,
9208 "pattern": "iqu",
9209 "size": "3"
9210 },
9211 {
9212 "continuation": false,
9213 "intact": false,
9214 "pattern": "ogu",
9215 "size": "1"
9216 }
9217 ],
9218 "v": [
9219 {
9220 "appendage": "j",
9221 "continuation": true,
9222 "intact": false,
9223 "pattern": "siv",
9224 "size": "3"
9225 },
9226 {
9227 "continuation": false,
9228 "intact": false,
9229 "pattern": "eiv",
9230 "size": "0"
9231 },
9232 {
9233 "continuation": true,
9234 "intact": false,
9235 "pattern": "iv",
9236 "size": "2"
9237 }
9238 ],
9239 "y": [
9240 {
9241 "continuation": true,
9242 "intact": false,
9243 "pattern": "bly",
9244 "size": "1"
9245 },
9246 {
9247 "appendage": "y",
9248 "continuation": true,
9249 "intact": false,
9250 "pattern": "ily",
9251 "size": "3"
9252 },
9253 {
9254 "continuation": false,
9255 "intact": false,
9256 "pattern": "ply",
9257 "size": "0"
9258 },
9259 {
9260 "continuation": true,
9261 "intact": false,
9262 "pattern": "ly",
9263 "size": "2"
9264 },
9265 {
9266 "continuation": false,
9267 "intact": false,
9268 "pattern": "ogy",
9269 "size": "1"
9270 },
9271 {
9272 "continuation": false,
9273 "intact": false,
9274 "pattern": "phy",
9275 "size": "1"
9276 },
9277 {
9278 "continuation": false,
9279 "intact": false,
9280 "pattern": "omy",
9281 "size": "1"
9282 },
9283 {
9284 "continuation": false,
9285 "intact": false,
9286 "pattern": "opy",
9287 "size": "1"
9288 },
9289 {
9290 "continuation": true,
9291 "intact": false,
9292 "pattern": "ity",
9293 "size": "3"
9294 },
9295 {
9296 "continuation": true,
9297 "intact": false,
9298 "pattern": "ety",
9299 "size": "3"
9300 },
9301 {
9302 "continuation": false,
9303 "intact": false,
9304 "pattern": "lty",
9305 "size": "2"
9306 },
9307 {
9308 "continuation": false,
9309 "intact": false,
9310 "pattern": "istry",
9311 "size": "5"
9312 },
9313 {
9314 "continuation": true,
9315 "intact": false,
9316 "pattern": "ary",
9317 "size": "3"
9318 },
9319 {
9320 "continuation": true,
9321 "intact": false,
9322 "pattern": "ory",
9323 "size": "3"
9324 },
9325 {
9326 "continuation": false,
9327 "intact": false,
9328 "pattern": "ify",
9329 "size": "3"
9330 },
9331 {
9332 "appendage": "t",
9333 "continuation": true,
9334 "intact": false,
9335 "pattern": "ncy",
9336 "size": "2"
9337 },
9338 {
9339 "continuation": true,
9340 "intact": false,
9341 "pattern": "acy",
9342 "size": "3"
9343 }
9344 ],
9345 "z": [
9346 {
9347 "continuation": true,
9348 "intact": false,
9349 "pattern": "iz",
9350 "size": "2"
9351 },
9352 {
9353 "appendage": "s",
9354 "continuation": false,
9355 "intact": false,
9356 "pattern": "yz",
9357 "size": "1"
9358 }
9359 ]
9360 };
9361
9362 return function(token) {
9363
9364 return applyRules(token.toLowerCase(), true);
9365 }
9366
9367 })();
9368
9369 //////////////////////////////////////////////////////////////////
9370 //////// MinEditDist (singleton)
9371 ////////////////////////////////////////////////////////////////
9372
9373 /**
9374 * Minimum-Edit-Distance (or Levenshtein distance) is a measure of the similarity
9375 * between two strings, the source string and the target string (t). The distance
9376 * is the number of deletions, insertions, or substitutions required to transform
9377 * the source into the target / avg_string_length<p>
9378 *
9379 * Adapted from Michael Gilleland's algorithm
9380 *
9381 * @name MinEditDist
9382 * @class
9383 * @private
9384 */
9385 var MinEditDist = {
9386
9387 _min3 : function(a,b,c) {
9388
9389 var min = a;
9390 if (b < min) min = b;
9391 if (c < min) min = c;
9392 return min;
9393 },
9394
9395 /**
9396 * Computes min-edit-distance between 2 string arrays
9397 * where each array element either matches or does not
9398 */
9399 _computeRawArray : function(srcArr, trgArr) { // TODO: make private to class
9400
9401 //log((srcArr)+" "+(trgArr));
9402
9403 var matrix = []; // matrix
9404 var sI; // ith element of s
9405 var tJ; // jth element of t
9406 var cost; // cost
9407
9408 // Step 1 ----------------------------------------------
9409
9410 if (srcArr.length == 0) return trgArr.length;
9411
9412 if (trgArr.length == 0) return srcArr.length;
9413
9414 //matrix = new var[srcArr.length + 1][trgArr.length + 1];
9415
9416 // Step 2 ----------------------------------------------
9417
9418 for (var i = 0; i <= srcArr.length; i++) {
9419 matrix[i] = [];
9420 matrix[i][0] = i;
9421 }
9422
9423 for (var j = 0; j <= trgArr.length; j++)
9424 matrix[0][j] = j;
9425
9426 // Step 3 ----------------------------------------------
9427
9428 //String[] srcArr = RiFreeTTSEngine.cleanPhonemes(srcArr);
9429 for (var i = 1; i <= srcArr.length; i++)
9430 {
9431 sI = srcArr[i - 1];
9432
9433 // Step 4 --------------------------------------------
9434
9435 for (var j = 1; j <= trgArr.length; j++)
9436 {
9437 tJ = trgArr[j - 1];
9438
9439 // Step 5 ------------------------------------------
9440
9441 cost = (sI === tJ) ? 0 : 1;
9442
9443 // Step 6 ------------------------------------------
9444 matrix[i][j] = this._min3 (matrix[i - 1][j] + 1,
9445 matrix[i][j - 1] + 1,
9446 matrix[i - 1][j - 1] + cost);
9447 }
9448 }
9449
9450 // Step 7 ----------------------------------------------
9451
9452 return matrix[srcArr.length][trgArr.length];
9453 },
9454
9455
9456 /**
9457 * Compute min-edit-distance between 2 strings
9458 * @see MinEditDist#computeAdjusted(java.lang.String,java.lang.String)
9459 */
9460 computeRaw : function(source, target) {
9461
9462 var st = Type.get(source), tt = Type.get(source);
9463
9464 if (st!=tt) err('Unexpected args: '+source+"/"+target);
9465
9466 if (tt===A) return this._computeRawArray(source, target);
9467
9468 if (!source.length && !target.length) return 0;
9469
9470 var matrix = []; // matrix
9471 var sI; // ith character of s
9472 var tJ; // jth character of t
9473 var cost; // cost
9474
9475 // Step 1 ----------------------------------------------
9476 var sourceLength = source.length;
9477 var targetLength = target.length;
9478
9479 if (sourceLength == 0) return targetLength;
9480
9481 if (targetLength == 0) return sourceLength;
9482
9483 //matrix = new int[sourceLength + 1][targetLength + 1];
9484
9485 // Step 2 ----------------------------------------------
9486
9487 for (var i = 0; i <= sourceLength; i++) {
9488 matrix[i] = [];
9489 matrix[i][0] = i;
9490 }
9491
9492 for (var j = 0; j <= targetLength; j++)
9493 matrix[0][j] = j;
9494
9495 // Step 3 ----------------------------------------------
9496
9497 for (var i = 1; i <= sourceLength; i++)
9498 {
9499
9500 sI = source.charAt(i - 1);
9501
9502 // Step 4 --------------------------------------------
9503
9504 for (var j = 1; j <= targetLength; j++)
9505 {
9506 tJ = target.charAt(j - 1);
9507
9508 // Step 5 ------------------------------------------
9509
9510 cost = (sI == tJ) ? 0 : 1;
9511
9512 // Step 6 ------------------------------------------
9513 matrix[i][j] = this._min3(matrix[i - 1][j] + 1,
9514 matrix[i][j - 1] + 1,
9515 matrix[i - 1][j - 1] + cost);
9516 }
9517 }
9518
9519 // Step 7 ----------------------------------------------
9520
9521 return matrix[sourceLength][targetLength];
9522
9523 },
9524
9525 /**
9526 * Compute min-edit-distance between 2 strings (or 2 arrays of strings)
9527 * divided by their average length.
9528 */
9529 computeAdjusted : function(source, target) {
9530
9531 var st = Type.get(source), tt = Type.get(source);
9532 if (st===tt) {
9533
9534 if (tt===S) {
9535 if (!source.length && !target.length) return 0;
9536 //log(this.computeRaw(source, target)+'/'+(source.length + target.length));
9537 return this.computeRaw(source, target) / (source.length + target.length);
9538 }
9539 else if (tt===A) {
9540 if (!source.length && !target.length) return 0;
9541 //log(_computeRawArray(source, target)+'/'+(source.length + target.length));
9542 return this._computeRawArray(source, target) / (source.length + target.length);
9543 }
9544 }
9545 err('Unexpected args: '+source+"/"+target);
9546
9547 }
9548
9549 }
9550
9551 //////////////////////////////////////////////////////////////////
9552 //////// RegexRule
9553 ////////////////////////////////////////////////////////////////
9554
9555 /**
9556 * @name RegexRule
9557 * @class
9558 * @private
9559 */
9560 var RegexRule = makeClass();
9561
9562 RegexRule.prototype = {
9563
9564 initialize : function(regex, offset, suffix) {
9565
9566 this.regex = new RegExp(regex);
9567 this.offset = offset;
9568 this.suffix = suffix;
9569 },
9570
9571 applies : function(word) {
9572
9573 return this.regex.test(trim(word));
9574 },
9575
9576 fire : function(word) {
9577
9578 return this.truncate(trim(word)) + this.suffix;
9579 },
9580
9581 analyze : function(word) {
9582
9583 return ((this.suffix != "") && endsWith(word, this.suffix)) ? true : false;
9584 },
9585
9586 truncate : function(word) {
9587
9588 return (this.offset == 0) ? word : word.substr(0, word.length - this.offset);
9589 }
9590 }
9591
9592
9593
9594 //////////////////////////////////////////////////////////////////////////////////////
9595 // adapted from: https://github.com/sole/tween.js
9596 //////////////////////////////////////////////////////////////////////////////////////
9597
9598 /**
9599 * @private
9600 */
9601 var TextBehavior = function (rt, object) {
9602
9603 var _parent = rt;
9604 var _object = object || _parent;
9605 var _valuesStart = {};
9606 var _valuesEnd = {};
9607 var _duration = 1000;
9608 var _delayTime = 0;
9609 var _startTime = null;
9610 var _easingFunction = Easing.Linear.None;
9611 var _interpolationFunction = Interpolation.Linear;
9612 var _chainedTween = null;
9613 var _onUpdateCallback = null;
9614 var _onCompleteCallback = null;
9615
9616 this.to = function ( properties, duration ) {
9617
9618 if ( duration !== null ) {
9619
9620 _duration = duration;
9621 }
9622
9623 _valuesEnd = properties;
9624
9625 return this;
9626 }
9627
9628 this.start = function ( time ) {
9629
9630 if (_parent)
9631 _parent._addBehavior( this );
9632 else
9633 err('Unable to add tween');
9634
9635 _startTime = time !== undefined ? time : Date.now();
9636 _startTime += _delayTime;
9637
9638 for ( var property in _valuesEnd ) {
9639
9640 // This prevents the engine from interpolating null values
9641 if ( _object[ property ] === null ) {
9642 console.error('null value in interpolater for: '+property);
9643 continue;
9644
9645 }
9646
9647 // check if an Array was provided as property value
9648 if ( _valuesEnd[ property ] instanceof Array ) {
9649
9650 if ( _valuesEnd[ property ].length === 0 ) {
9651
9652 continue;
9653 }
9654
9655 // create a local copy of the Array with the start value at the front
9656 _valuesEnd[ property ] = [ _object[ property ] ].concat( _valuesEnd[ property ] );
9657 }
9658
9659 _valuesStart[ property ] = _object[ property ];
9660 }
9661
9662 return this;
9663
9664 }
9665
9666 this.stop = function () {
9667
9668 if (_parent) _parent._removeBehavior( this );
9669 return this;
9670
9671 }
9672
9673 this.delay = function ( amount ) {
9674
9675 _delayTime = amount;
9676 return this;
9677
9678 }
9679
9680 this.easing = function ( easing ) {
9681
9682 _easingFunction = easing;
9683 return this;
9684
9685 }
9686
9687 this.interpolation = function ( interpolation ) {
9688
9689 _interpolationFunction = interpolation;
9690 return this;
9691
9692 }
9693
9694 this.chain = function ( chainedTween ) {
9695
9696 _chainedTween = chainedTween;
9697 return this;
9698
9699 }
9700
9701 this.onUpdate = function ( onUpdateCallback ) {
9702
9703 _onUpdateCallback = onUpdateCallback;
9704 return this;
9705
9706 }
9707
9708 this.onComplete = function ( onCompleteCallback ) {
9709
9710 _onCompleteCallback = onCompleteCallback;
9711 return this;
9712
9713 }
9714
9715 this.update = function ( time ) {
9716
9717 if ( time < _startTime ) {
9718
9719 return true;
9720
9721 }
9722
9723 var elapsed = ( time - _startTime ) / _duration;
9724 elapsed = elapsed > 1 ? 1 : elapsed;
9725
9726 var value = _easingFunction( elapsed );
9727
9728 for ( var property in _valuesStart ) {
9729
9730 var start = _valuesStart[ property ];
9731 var end = _valuesEnd[ property ];
9732
9733 if ( end instanceof Array ) {
9734
9735 _object[ property ] = _interpolationFunction( end, value );
9736
9737 } else {
9738
9739 _object[ property ] = start + ( end - start ) * value;
9740
9741 }
9742 }
9743
9744 if (_onUpdateCallback !== null ) {
9745
9746 _onUpdateCallback.call( _object, value );
9747 }
9748
9749 if ( elapsed == 1 ) {
9750
9751 if ( _onCompleteCallback !== null ) {
9752
9753 _onCompleteCallback.call( _object );
9754 }
9755
9756 if ( _chainedTween !== null ) {
9757
9758 _chainedTween.start();
9759 }
9760
9761 return false;
9762
9763 }
9764
9765 return true;
9766 }
9767
9768 }
9769
9770 /**
9771 * @name RiText_P5
9772 * @class
9773 * @private
9774 */
9775 var RiText_P5 = makeClass();
9776
9777 RiText_P5.prototype = {
9778
9779 initialize : function(p) {
9780
9781 this.p = p;
9782 },
9783
9784 _size : function() {
9785
9786 return this.p.size.apply(this, arguments);
9787 },
9788
9789 _getGraphics : function() {
9790
9791 return this.p;
9792 },
9793
9794 _pushState : function(str) {
9795
9796 this.p.pushStyle();
9797 this.p.pushMatrix();
9798 return this;
9799 },
9800
9801 _popState : function() {
9802
9803 this.p.popStyle();
9804 this.p.popMatrix();
9805 return this;
9806 },
9807
9808 _textAlign : function(align) {
9809
9810 this.p.textAlign.apply(this,arguments);
9811 return this;
9812 },
9813
9814 _scale : function(sx, sy) {
9815
9816 this.p.scale(sx, sy, 1);
9817 },
9818
9819 _translate : function(tx, ty) {
9820
9821 this.p.translate(tx, ty, 0);
9822 },
9823
9824 _rotate : function(zRot) {
9825
9826 this.p.rotate(zRot);
9827 },
9828
9829 _text : function(str, x, y) {
9830
9831 this.p.text.apply(this,arguments);
9832 },
9833
9834 _fill : function(r,g,b,a) {
9835
9836 this.p.fill.apply(this,arguments);
9837 },
9838
9839 _stroke : function(r,g,b,a) {
9840
9841 this.p.stroke.apply(this,arguments);
9842 },
9843
9844 _background : function(r,g,b,a) {
9845
9846 this.p.background.apply(this,arguments);
9847 },
9848
9849 // actual creation: only called from RiText.createDefaultFont();!
9850 _createFont : function(fontName, fontSize, leading) { // ignores leading
9851
9852 //log("[P5] Creating font: "+fontName+"-"+fontSize+"/"+leading);
9853 return this.p.createFont(fontName, fontSize);
9854 },
9855
9856 _rect : function(x,y,w,h) {
9857
9858 this.p.rect.apply(this,arguments);
9859 },
9860
9861 _line : function(x1,y1,x2,y2,lw) {
9862
9863 if (lw) p.strokeWeight(lw);
9864 this.p.line.apply(this,arguments);
9865 },
9866
9867 _textFont : function(fontObj) {
9868
9869 if (!Type.is(fontObj,O))
9870 err("_textFont takes object!");
9871 this.p.textFont(fontObj, fontObj.size);
9872 },
9873
9874 _textWidth : function(fontObj, str) {
9875
9876 this.p.pushStyle();
9877 this.p.textFont(fontObj,fontObj.size); // was _textFont
9878 var tw = this.p.textWidth(str);
9879 this.p.popStyle();
9880 return tw;
9881 },
9882
9883 _textHeight : function(rt) {
9884
9885 return this._getBoundingBox(rt).height;
9886 },
9887
9888 _textAscent : function(rt) {
9889
9890 this.p.pushStyle();
9891 this.p.textFont(rt._font, rt._font.size);
9892 var asc = this.p.textAscent();
9893 this.p.popStyle();
9894 return asc;
9895 },
9896
9897 _textDescent : function(rt) {
9898
9899 this.p.pushStyle();
9900 this.p.textFont(rt._font, rt._font.size);
9901 var dsc = this.p.textDescent();
9902 this.p.popStyle();
9903 return dsc;
9904 },
9905
9906 _width : function() {
9907
9908 return this.p.width;
9909 },
9910
9911 _height : function() {
9912
9913 return this.p.height;
9914 },
9915
9916 // what about scale?
9917 _getBoundingBox : function(rt) {
9918
9919 this.p.pushStyle();
9920
9921 var ascent = Math.round(this.p.textAscent()),
9922 descent = Math.round(this.p.textDescent()),
9923 width = Math.round(this.p.textWidth(rt.text()));
9924
9925 this.p.popStyle();
9926
9927 return { x: 0, y: descent-1, width: width, height: (ascent+descent)+1 };
9928 },
9929
9930 _type : function() {
9931
9932 return "Processing";
9933 },
9934
9935 toString : function() {
9936
9937 return "RiText_"+this._type;
9938 }
9939 }
9940
9941 ////////////////////////////////// End Classes ///////////////////////////////////
9942
9943 // TODO: clean this mess up... wrap in Constants
9944
9945 var QUESTION_STARTS = ["Was", "What", "When", "Where", "How", "Which", "If", "Who", "Is", "Could", "Might", "Will", "Does", "Why", "Are" ];
9946
9947 var W_QUESTION_STARTS = ["Was", "What", "When", "Where", "How", "Which", "Why", "Who", "Will"];
9948
9949 var PUNCTUATION_CLASS = /[-[\]{}()*+!?%&.,\\^$|#@<>|+=;:]/g, ONLY_PUNCT = /^[^0-9A-Za-z\s]*$/;
9950
9951 var ALL_PUNCT = /^[-[\]{}()*+!?%&.,\\^$|#@<>|+=;:]+$/g, DeLiM = ':DeLiM:', RiTextCallbacksDisabled = false;
9952
9953 var SP = ' ', E = '', N = Type.N, S = Type.S, O = Type.O, A = Type.A, B = Type.B, R = Type.R, F = Type.F;
9954
9955 var DEFAULT_PLURAL_RULE = RegexRule("^((\\w+)(-\\w+)*)(\\s((\\w+)(-\\w+)*))*$", 0, "s");
9956
9957 var PLURAL_RULES = [
9958 RegexRule("^(piano|photo|solo|ego|tobacco|cargo|golf|grief)$", 0, "s"),
9959 RegexRule("^(wildlife)$", 0, "s"),
9960 RegexRule("[bcdfghjklmnpqrstvwxyz]o$", 0, "es"),
9961 RegexRule("[bcdfghjklmnpqrstvwxyz]y$", 1, "ies"),
9962 RegexRule("([zsx]|ch|sh)$", 0, "es"),
9963 RegexRule("[lraeiou]fe$", 2, "ves"),
9964 RegexRule("[lraeiou]f$", 1, "ves"),
9965 RegexRule("(eu|eau)$", 0, "x"),
9966 RegexRule("(man|woman)$", 2, "en"),
9967 RegexRule("money$", 2, "ies"),
9968 RegexRule("person$", 4, "ople"),
9969 RegexRule("motif$", 0, "s"),
9970 RegexRule("^meninx|phalanx$", 1, "ges"),
9971 RegexRule("(xis|sis)$", 2, "es"),
9972 RegexRule("schema$", 0, "ta"),
9973 RegexRule("^bus$", 0, "ses"),
9974 RegexRule("child$", 0, "ren"),
9975 RegexRule("^(curi|formul|vertebr|larv|uln|alumn|signor|alg)a$", 0, "e"),
9976 RegexRule("^corpus$", 2, "ora"),
9977 RegexRule("^(maharaj|raj|myn|mull)a$", 0, "hs"),
9978 RegexRule("^aide-de-camp$", 8, "s-de-camp"),
9979 RegexRule("^apex|cortex$", 2, "ices"),
9980 RegexRule("^weltanschauung$", 0, "en"),
9981 RegexRule("^lied$", 0, "er"),
9982 RegexRule("^tooth$", 4, "eeth"),
9983 RegexRule("^[lm]ouse$", 4, "ice"),
9984 RegexRule("^foot$", 3, "eet"),
9985 RegexRule("femur", 2, "ora"),
9986 RegexRule("goose", 4, "eese"),
9987 RegexRule("(human|german|roman)$", 0, "s"),
9988 RegexRule("(crisis)$", 2, "es"),
9989 RegexRule("^(monarch|loch|stomach)$", 0, "s"),
9990 RegexRule("^(taxi|chief|proof|ref|relief|roof|belief)$", 0, "s"),
9991 RegexRule("^(co|no)$", 0, "'s"),
9992 RegexRule("^(memorandum|bacterium|curriculum|minimum|"
9993 + "maximum|referendum|spectrum|phenomenon|criterion)$", 2, "a"),
9994 RegexRule("^(appendix|index|matrix)", 2, "ices"),
9995 RegexRule("^(stimulus|alumnus)$", 2, "i"),
9996 RegexRule(
9997 "^(Bantu|Bengalese|Bengali|Beninese|Boche|bonsai|"
9998 + "Burmese|Chinese|Congolese|Gabonese|Guyanese|Japanese|Javanese|"
9999 + "Lebanese|Maltese|Olympics|Portuguese|Senegalese|Siamese|Singhalese|"
10000 + "Sinhalese|Sioux|Sudanese|Swiss|Taiwanese|Togolese|Vietnamese|aircraft|"
10001 + "anopheles|apparatus|asparagus|barracks|bellows|bison|bluefish|bob|bourgeois|"
10002 + "bream|brill|butterfingers|carp|catfish|chassis|clothes|chub|cod|codfish|"
10003 + "coley|contretemps|corps|crawfish|crayfish|crossroads|cuttlefish|dace|dice|"
10004 + "dogfish|doings|dory|downstairs|eldest|earnings|economics|electronics|finnan|"
10005 + "firstborn|fish|flatfish|flounder|fowl|fry|fries|works|globefish|goldfish|"
10006 + "grand|gudgeon|gulden|haddock|hake|halibut|headquarters|herring|hertz|horsepower|"
10007 + "goods|hovercraft|hundredweight|ironworks|jackanapes|kilohertz|kurus|kwacha|ling|lungfish|"
10008 + "mackerel|means|megahertz|moorfowl|moorgame|mullet|nepalese|offspring|pampas|parr|(pants$)|"
10009 + "patois|pekinese|penn'orth|perch|pickerel|pike|pince-nez|plaice|precis|quid|rand|"
10010 + "rendezvous|revers|roach|roux|salmon|samurai|series|seychelles|seychellois|shad|"
10011 + "sheep|shellfish|smelt|spacecraft|species|starfish|stockfish|sunfish|superficies|"
10012 + "sweepstakes|swordfish|tench|tennis|tope|triceps|trout|tuna|tunafish|tunny|turbot|trousers|"
10013 + "undersigned|veg|waterfowl|waterworks|waxworks|whiting|wildfowl|woodworm|"
10014 + "yen|aries|pisces|forceps|lieder|jeans|physics|mathematics|news|odds|politics|remains|"
10015 + "surroundings|thanks|statistics|goods|aids)$", 0, "", 0)
10016 ],
10017 ANY_STEM = "^((\\w+)(-\\w+)*)(\\s((\\w+)(-\\w+)*))*$", CONS = "[bcdfghjklmnpqrstvwxyz]",
10018 VERBAL_PREFIX = "((be|with|pre|un|over|re|mis|under|out|up|fore|for|counter|co|sub)(-?))",
10019
10020 AUXILIARIES = [ "do", "have", "be" ],
10021 MODALS = [ "shall", "would", "may", "might", "ought", "should" ],
10022 // also used by pluralizer
10023 SYMBOLS = [ "!", "?", "$", "%", "*", "+", "-", "=" ],
10024
10025 ING_FORM_RULES = [
10026 RegexRule(CONS + "ie$", 2, "ying", 1),
10027 RegexRule("[^ie]e$", 1, "ing", 1),
10028 RegexRule("^bog-down$", 5, "ging-down", 0),
10029 RegexRule("^chivy$", 1, "vying", 0),
10030 RegexRule("^gen-up$", 3, "ning-up", 0),
10031 RegexRule("^trek$", 1, "cking", 0), RegexRule("^ko$", 0, "'ing", 0),
10032 RegexRule("^(age|be)$", 0, "ing", 0), RegexRule("(ibe)$", 1, "ing", 0)
10033 ],
10034
10035 PAST_PARTICIPLE_RULES = [ RegexRule("e$", 0, "d", 1),
10036 RegexRule(CONS + "y$", 1, "ied", 1),
10037 RegexRule("^" + VERBAL_PREFIX + "?(bring)$", 3, "ought", 0),
10038 RegexRule(
10039 "^"
10040 + VERBAL_PREFIX
10041 + "?(take|rise|strew|blow|draw|drive|know|give|"
10042 + "arise|gnaw|grave|grow|hew|know|mow|see|sew|throw|prove|saw|quartersaw|"
10043 + "partake|sake|shake|shew|show|shrive|sightsee|strew|strive)$",
10044 0, "n", 0),
10045 RegexRule("^" + VERBAL_PREFIX + "?[gd]o$", 0, "ne", 1),
10046 RegexRule("^(beat|eat|be|fall)$", 0, "en", 0),
10047 RegexRule("^(have)$", 2, "d", 0),
10048 RegexRule("^" + VERBAL_PREFIX + "?bid$", 0, "den", 0),
10049 RegexRule("^" + VERBAL_PREFIX + "?[lps]ay$", 1, "id", 1),
10050 RegexRule("^behave$", 0, "d", 0),
10051 RegexRule("^" + VERBAL_PREFIX + "?have$", 2, "d", 1),
10052 RegexRule("(sink|slink|drink)$", 3, "unk", 0),
10053 RegexRule("(([sfc][twlp]?r?|w?r)ing|hang)$", 3, "ung", 0),
10054 RegexRule("^" + VERBAL_PREFIX + "?(shear|swear|bear|wear|tear)$",3,"orn",0),
10055 RegexRule("^" + VERBAL_PREFIX + "?(bend|spend|send|lend)$", 1, "t", 0),
10056 RegexRule("^" + VERBAL_PREFIX + "?(weep|sleep|sweep|creep|keep$)$", 2,"pt", 0),
10057 RegexRule("^" + VERBAL_PREFIX + "?(sell|tell)$", 3, "old", 0),
10058 RegexRule("^(outfight|beseech)$", 4, "ought", 0),
10059 RegexRule("^bethink$", 3, "ought", 0),
10060 RegexRule("^buy$", 2, "ought", 0),
10061 RegexRule("^aby$", 1, "ought", 0),
10062 RegexRule("^tarmac", 0, "ked", 0),
10063 RegexRule("^abide$", 3, "ode", 0),
10064 RegexRule("^" + VERBAL_PREFIX + "?(speak|(a?)wake|break)$", 3, "oken", 0),
10065 RegexRule("^backbite$", 1, "ten", 0),
10066 RegexRule("^backslide$", 1, "den", 0),
10067 RegexRule("^become$", 3, "ame", 0),
10068 RegexRule("^begird$", 3, "irt", 0),
10069 RegexRule("^outlie$", 2, "ay", 0),
10070 RegexRule("^rebind$", 3, "ound", 0),
10071 RegexRule("^relay$", 2, "aid", 0),
10072 RegexRule("^shit$", 3, "hat", 0),
10073 RegexRule("^bereave$", 4, "eft", 0),
10074 RegexRule("^foreswear$", 3, "ore", 0),
10075 RegexRule("^overfly$", 1, "own", 0),
10076 RegexRule("^beget$", 2, "otten", 0),
10077 RegexRule("^begin$", 3, "gun", 0),
10078 RegexRule("^bestride$", 1, "den", 0),
10079 RegexRule("^bite$", 1, "ten", 0),
10080 RegexRule("^bleed$", 4, "led", 0),
10081 RegexRule("^bog-down$", 5, "ged-down", 0),
10082 RegexRule("^bind$", 3, "ound", 0),
10083 RegexRule("^(.*)feed$", 4, "fed", 0),
10084 RegexRule("^breed$", 4, "red", 0),
10085 RegexRule("^brei", 0, "d", 0),
10086 RegexRule("^bring$", 3, "ought", 0),
10087 RegexRule("^build$", 1, "t", 0),
10088 RegexRule("^come", 0, "", 0),
10089 RegexRule("^catch$", 3, "ught", 0),
10090 RegexRule("^chivy$", 1, "vied", 0),
10091 RegexRule("^choose$", 3, "sen", 0),
10092 RegexRule("^cleave$", 4, "oven", 0),
10093 RegexRule("^crossbreed$", 4, "red", 0),
10094 RegexRule("^deal", 0, "t", 0),
10095 RegexRule("^dow$", 1, "ught", 0),
10096 RegexRule("^dream", 0, "t", 0),
10097 RegexRule("^dig$", 3, "dug", 0),
10098 RegexRule("^dwell$", 2, "lt", 0),
10099 RegexRule("^enwind$", 3, "ound", 0),
10100 RegexRule("^feel$", 3, "elt", 0),
10101 RegexRule("^flee$", 2, "ed", 0),
10102 RegexRule("^floodlight$", 5, "lit", 0),
10103 RegexRule("^fly$", 1, "own", 0),
10104 RegexRule("^forbear$", 3, "orne", 0),
10105 RegexRule("^forerun$", 3, "ran", 0),
10106 RegexRule("^forget$", 2, "otten", 0),
10107 RegexRule("^fight$", 4, "ought", 0),
10108 RegexRule("^find$", 3, "ound", 0),
10109 RegexRule("^freeze$", 4, "ozen", 0),
10110 RegexRule("^gainsay$", 2, "aid", 0),
10111 RegexRule("^gin$", 3, "gan", 0),
10112 RegexRule("^gen-up$", 3, "ned-up", 0),
10113 RegexRule("^ghostwrite$", 1, "ten", 0),
10114 RegexRule("^get$", 2, "otten", 0),
10115 RegexRule("^grind$", 3, "ound", 0),
10116 RegexRule("^hacksaw", 0, "n", 0),
10117 RegexRule("^hear", 0, "d", 0),
10118 RegexRule("^hold$", 3, "eld", 0),
10119 RegexRule("^hide$", 1, "den", 0),
10120 RegexRule("^honey$", 2, "ied", 0),
10121 RegexRule("^inbreed$", 4, "red", 0),
10122 RegexRule("^indwell$", 3, "elt", 0),
10123 RegexRule("^interbreed$", 4, "red", 0),
10124 RegexRule("^interweave$", 4, "oven", 0),
10125 RegexRule("^inweave$", 4, "oven", 0),
10126 RegexRule("^ken$", 2, "ent", 0),
10127 RegexRule("^kneel$", 3, "elt", 0),
10128 RegexRule("^lie$", 2, "ain", 0),
10129 RegexRule("^leap$", 0, "t", 0),
10130 RegexRule("^learn$", 0, "t", 0),
10131 RegexRule("^lead$", 4, "led", 0),
10132 RegexRule("^leave$", 4, "eft", 0),
10133 RegexRule("^light$", 5, "lit", 0),
10134 RegexRule("^lose$", 3, "ost", 0),
10135 RegexRule("^make$", 3, "ade", 0),
10136 RegexRule("^mean", 0, "t", 0),
10137 RegexRule("^meet$", 4, "met", 0),
10138 RegexRule("^misbecome$", 3, "ame", 0),
10139 RegexRule("^misdeal$", 2, "alt", 0),
10140 RegexRule("^mishear$", 1, "d", 0),
10141 RegexRule("^mislead$", 4, "led", 0),
10142 RegexRule("^misunderstand$", 3, "ood", 0),
10143 RegexRule("^outbreed$", 4, "red", 0),
10144 RegexRule("^outrun$", 3, "ran", 0),
10145 RegexRule("^outride$", 1, "den", 0),
10146 RegexRule("^outshine$", 3, "one", 0),
10147 RegexRule("^outshoot$", 4, "hot", 0),
10148 RegexRule("^outstand$", 3, "ood", 0),
10149 RegexRule("^outthink$", 3, "ought", 0),
10150 RegexRule("^outgo$", 2, "went", 0),
10151 RegexRule("^overbear$", 3, "orne", 0),
10152 RegexRule("^overbuild$", 3, "ilt", 0),
10153 RegexRule("^overcome$", 3, "ame", 0),
10154 RegexRule("^overfly$", 2, "lew", 0),
10155 RegexRule("^overhear$", 2, "ard", 0),
10156 RegexRule("^overlie$", 2, "ain", 0),
10157 RegexRule("^overrun$", 3, "ran", 0),
10158 RegexRule("^override$", 1, "den", 0),
10159 RegexRule("^overshoot$", 4, "hot", 0),
10160 RegexRule("^overwind$", 3, "ound", 0),
10161 RegexRule("^overwrite$", 1, "ten", 0),
10162 RegexRule("^run$", 3, "ran", 0),
10163 RegexRule("^rebuild$", 3, "ilt", 0),
10164 RegexRule("^red$", 3, "red", 0),
10165 RegexRule("^redo$", 1, "one", 0),
10166 RegexRule("^remake$", 3, "ade", 0),
10167 RegexRule("^rerun$", 3, "ran", 0),
10168 RegexRule("^resit$", 3, "sat", 0),
10169 RegexRule("^rethink$", 3, "ought", 0),
10170 RegexRule("^rewind$", 3, "ound", 0),
10171 RegexRule("^rewrite$", 1, "ten", 0),
10172 RegexRule("^ride$", 1, "den", 0),
10173 RegexRule("^reeve$", 4, "ove", 0),
10174 RegexRule("^sit$", 3, "sat", 0),
10175 RegexRule("^shoe$", 3, "hod", 0),
10176 RegexRule("^shine$", 3, "one", 0),
10177 RegexRule("^shoot$", 4, "hot", 0),
10178 RegexRule("^ski$", 1, "i'd", 0),
10179 RegexRule("^slide$", 1, "den", 0),
10180 RegexRule("^smite$", 1, "ten", 0),
10181 RegexRule("^seek$", 3, "ought", 0),
10182 RegexRule("^spit$", 3, "pat", 0),
10183 RegexRule("^speed$", 4, "ped", 0),
10184 RegexRule("^spellbind$", 3, "ound", 0),
10185 RegexRule("^spoil$", 2, "ilt", 0),
10186 RegexRule("^spotlight$", 5, "lit", 0),
10187 RegexRule("^spin$", 3, "pun", 0),
10188 RegexRule("^steal$", 3, "olen", 0),
10189 RegexRule("^stand$", 3, "ood", 0),
10190 RegexRule("^stave$", 3, "ove", 0),
10191 RegexRule("^stride$", 1, "den", 0),
10192 RegexRule("^strike$", 3, "uck", 0),
10193 RegexRule("^stick$", 3, "uck", 0),
10194 RegexRule("^swell$", 3, "ollen", 0),
10195 RegexRule("^swim$", 3, "wum", 0),
10196 RegexRule("^teach$", 4, "aught", 0),
10197 RegexRule("^think$", 3, "ought", 0),
10198 RegexRule("^tread$", 3, "odden", 0),
10199 RegexRule("^typewrite$", 1, "ten", 0),
10200 RegexRule("^unbind$", 3, "ound", 0),
10201 RegexRule("^underbuy$", 2, "ought", 0),
10202 RegexRule("^undergird$", 3, "irt", 0),
10203 RegexRule("^undergo$", 1, "one", 0),
10204 RegexRule("^underlie$", 2, "ain", 0),
10205 RegexRule("^undershoot$", 4, "hot", 0),
10206 RegexRule("^understand$", 3, "ood", 0),
10207 RegexRule("^unfreeze$", 4, "ozen", 0),
10208 RegexRule("^unlearn", 0, "t", 0),
10209 RegexRule("^unmake$", 3, "ade", 0),
10210 RegexRule("^unreeve$", 4, "ove", 0),
10211 RegexRule("^unstick$", 3, "uck", 0),
10212 RegexRule("^unteach$", 4, "aught", 0),
10213 RegexRule("^unthink$", 3, "ought", 0),
10214 RegexRule("^untread$", 3, "odden", 0),
10215 RegexRule("^unwind$", 3, "ound", 0),
10216 RegexRule("^upbuild$", 1, "t", 0),
10217 RegexRule("^uphold$", 3, "eld", 0),
10218 RegexRule("^upheave$", 4, "ove", 0),
10219 RegexRule("^waylay$", 2, "ain", 0),
10220 RegexRule("^whipsaw$", 2, "awn", 0),
10221 RegexRule("^withhold$", 3, "eld", 0),
10222 RegexRule("^withstand$", 3, "ood", 0),
10223 RegexRule("^win$", 3, "won", 0),
10224 RegexRule("^wind$", 3, "ound", 0),
10225 RegexRule("^weave$", 4, "oven", 0),
10226 RegexRule("^write$", 1, "ten", 0),
10227 RegexRule("^trek$", 1, "cked", 0),
10228 RegexRule("^ko$", 1, "o'd", 0),
10229 RegexRule("^win$", 2, "on", 0),
10230
10231 // Null past forms
10232 RegexRule(
10233 "^"
10234 + VERBAL_PREFIX
10235 + "?(cast|thrust|typeset|cut|bid|upset|wet|bet|cut|hit|hurt|inset|let|cost|burst|beat|beset|set|upset|hit|offset|put|quit|"
10236 + "wed|typeset|wed|spread|split|slit|read|run|shut|shed)$", 0,
10237 "", 0) ],
10238
10239 PAST_TENSE_RULES = [
10240 RegexRule("^(reduce)$", 0, "d", 0),
10241 RegexRule("e$", 0, "d", 1),
10242 RegexRule("^" + VERBAL_PREFIX + "?[pls]ay$", 1, "id", 1),
10243 RegexRule(CONS + "y$", 1, "ied", 1),
10244 RegexRule("^(fling|cling|hang)$", 3, "ung", 0),
10245 RegexRule("(([sfc][twlp]?r?|w?r)ing)$", 3, "ang", 1),
10246 RegexRule("^" + VERBAL_PREFIX + "?(bend|spend|send|lend|spend)$", 1, "t", 0),
10247 RegexRule("^" + VERBAL_PREFIX + "?lie$", 2, "ay", 0),
10248 RegexRule("^" + VERBAL_PREFIX + "?(weep|sleep|sweep|creep|keep)$", 2, "pt",
10249 0),
10250 RegexRule("^" + VERBAL_PREFIX + "?(sell|tell)$", 3, "old", 0),
10251 RegexRule("^" + VERBAL_PREFIX + "?do$", 1, "id", 0),
10252 RegexRule("^" + VERBAL_PREFIX + "?dig$", 2, "ug", 0),
10253 RegexRule("^behave$", 0, "d", 0),
10254 RegexRule("^(have)$", 2, "d", 0),
10255 RegexRule("(sink|drink)$", 3, "ank", 0),
10256 RegexRule("^swing$", 3, "ung", 0),
10257 RegexRule("^be$", 2, "was", 0),
10258 RegexRule("^outfight$", 4, "ought", 0),
10259 RegexRule("^tarmac", 0, "ked", 0),
10260 RegexRule("^abide$", 3, "ode", 0),
10261 RegexRule("^aby$", 1, "ought", 0),
10262 RegexRule("^become$", 3, "ame", 0),
10263 RegexRule("^begird$", 3, "irt", 0),
10264 RegexRule("^outlie$", 2, "ay", 0),
10265 RegexRule("^rebind$", 3, "ound", 0),
10266 RegexRule("^shit$", 3, "hat", 0),
10267 RegexRule("^bereave$", 4, "eft", 0),
10268 RegexRule("^foreswear$", 3, "ore", 0),
10269 RegexRule("^bename$", 3, "empt", 0),
10270 RegexRule("^beseech$", 4, "ought", 0),
10271 RegexRule("^bethink$", 3, "ought", 0),
10272 RegexRule("^bleed$", 4, "led", 0),
10273 RegexRule("^bog-down$", 5, "ged-down", 0),
10274 RegexRule("^buy$", 2, "ought", 0),
10275 RegexRule("^bind$", 3, "ound", 0),
10276 RegexRule("^(.*)feed$", 4, "fed", 0),
10277 RegexRule("^breed$", 4, "red", 0),
10278 RegexRule("^brei$", 2, "eid", 0),
10279 RegexRule("^bring$", 3, "ought", 0),
10280 RegexRule("^build$", 3, "ilt", 0),
10281 RegexRule("^come$", 3, "ame", 0),
10282 RegexRule("^catch$", 3, "ught", 0),
10283 RegexRule("^clothe$", 5, "lad", 0),
10284 RegexRule("^crossbreed$", 4, "red", 0),
10285 RegexRule("^deal$", 2, "alt", 0),
10286 RegexRule("^dow$", 1, "ught", 0),
10287 RegexRule("^dream$", 2, "amt", 0),
10288 RegexRule("^dwell$", 3, "elt", 0),
10289 RegexRule("^enwind$", 3, "ound", 0),
10290 RegexRule("^feel$", 3, "elt", 0),
10291 RegexRule("^flee$", 3, "led", 0),
10292 RegexRule("^floodlight$", 5, "lit", 0),
10293 RegexRule("^arise$", 3, "ose", 0),
10294 RegexRule("^eat$", 3, "ate", 0),
10295 RegexRule("^awake$", 3, "oke", 0),
10296 RegexRule("^backbite$", 4, "bit", 0),
10297 RegexRule("^backslide$", 4, "lid", 0),
10298 RegexRule("^befall$", 3, "ell", 0),
10299 RegexRule("^begin$", 3, "gan", 0),
10300 RegexRule("^beget$", 3, "got", 0),
10301 RegexRule("^behold$", 3, "eld", 0),
10302 RegexRule("^bespeak$", 3, "oke", 0),
10303 RegexRule("^bestride$", 3, "ode", 0),
10304 RegexRule("^betake$", 3, "ook", 0),
10305 RegexRule("^bite$", 4, "bit", 0),
10306 RegexRule("^blow$", 3, "lew", 0),
10307 RegexRule("^bear$", 3, "ore", 0),
10308 RegexRule("^break$", 3, "oke", 0),
10309 RegexRule("^choose$", 4, "ose", 0),
10310 RegexRule("^cleave$", 4, "ove", 0),
10311 RegexRule("^countersink$", 3, "ank", 0),
10312 RegexRule("^drink$", 3, "ank", 0),
10313 RegexRule("^draw$", 3, "rew", 0),
10314 RegexRule("^drive$", 3, "ove", 0),
10315 RegexRule("^fall$", 3, "ell", 0),
10316 RegexRule("^fly$", 2, "lew", 0),
10317 RegexRule("^flyblow$", 3, "lew", 0),
10318 RegexRule("^forbid$", 2, "ade", 0),
10319 RegexRule("^forbear$", 3, "ore", 0),
10320 RegexRule("^foreknow$", 3, "new", 0),
10321 RegexRule("^foresee$", 3, "saw", 0),
10322 RegexRule("^forespeak$", 3, "oke", 0),
10323 RegexRule("^forego$", 2, "went", 0),
10324 RegexRule("^forgive$", 3, "ave", 0),
10325 RegexRule("^forget$", 3, "got", 0),
10326 RegexRule("^forsake$", 3, "ook", 0),
10327 RegexRule("^forspeak$", 3, "oke", 0),
10328 RegexRule("^forswear$", 3, "ore", 0),
10329 RegexRule("^forgo$", 2, "went", 0),
10330 RegexRule("^fight$", 4, "ought", 0),
10331 RegexRule("^find$", 3, "ound", 0),
10332 RegexRule("^freeze$", 4, "oze", 0),
10333 RegexRule("^give$", 3, "ave", 0),
10334 RegexRule("^geld$", 3, "elt", 0),
10335 RegexRule("^gen-up$", 3, "ned-up", 0),
10336 RegexRule("^ghostwrite$", 3, "ote", 0),
10337 RegexRule("^get$", 3, "got", 0),
10338 RegexRule("^grow$", 3, "rew", 0),
10339 RegexRule("^grind$", 3, "ound", 0),
10340 RegexRule("^hear$", 2, "ard", 0),
10341 RegexRule("^hold$", 3, "eld", 0),
10342 RegexRule("^hide$", 4, "hid", 0),
10343 RegexRule("^honey$", 2, "ied", 0),
10344 RegexRule("^inbreed$", 4, "red", 0),
10345 RegexRule("^indwell$", 3, "elt", 0),
10346 RegexRule("^interbreed$", 4, "red", 0),
10347 RegexRule("^interweave$", 4, "ove", 0),
10348 RegexRule("^inweave$", 4, "ove", 0),
10349 RegexRule("^ken$", 2, "ent", 0),
10350 RegexRule("^kneel$", 3, "elt", 0),
10351 RegexRule("^^know$$", 3, "new", 0),
10352 RegexRule("^leap$", 2, "apt", 0),
10353 RegexRule("^learn$", 2, "rnt", 0),
10354 RegexRule("^lead$", 4, "led", 0),
10355 RegexRule("^leave$", 4, "eft", 0),
10356 RegexRule("^light$", 5, "lit", 0),
10357 RegexRule("^lose$", 3, "ost", 0),
10358 RegexRule("^make$", 3, "ade", 0),
10359 RegexRule("^mean$", 2, "ant", 0),
10360 RegexRule("^meet$", 4, "met", 0),
10361 RegexRule("^misbecome$", 3, "ame", 0),
10362 RegexRule("^misdeal$", 2, "alt", 0),
10363 RegexRule("^misgive$", 3, "ave", 0),
10364 RegexRule("^mishear$", 2, "ard", 0),
10365 RegexRule("^mislead$", 4, "led", 0),
10366 RegexRule("^mistake$", 3, "ook", 0),
10367 RegexRule("^misunderstand$", 3, "ood", 0),
10368 RegexRule("^outbreed$", 4, "red", 0),
10369 RegexRule("^outgrow$", 3, "rew", 0),
10370 RegexRule("^outride$", 3, "ode", 0),
10371 RegexRule("^outshine$", 3, "one", 0),
10372 RegexRule("^outshoot$", 4, "hot", 0),
10373 RegexRule("^outstand$", 3, "ood", 0),
10374 RegexRule("^outthink$", 3, "ought", 0),
10375 RegexRule("^outgo$", 2, "went", 0),
10376 RegexRule("^outwear$", 3, "ore", 0),
10377 RegexRule("^overblow$", 3, "lew", 0),
10378 RegexRule("^overbear$", 3, "ore", 0),
10379 RegexRule("^overbuild$", 3, "ilt", 0),
10380 RegexRule("^overcome$", 3, "ame", 0),
10381 RegexRule("^overdraw$", 3, "rew", 0),
10382 RegexRule("^overdrive$", 3, "ove", 0),
10383 RegexRule("^overfly$", 2, "lew", 0),
10384 RegexRule("^overgrow$", 3, "rew", 0),
10385 RegexRule("^overhear$", 2, "ard", 0),
10386 RegexRule("^overpass$", 3, "ast", 0),
10387 RegexRule("^override$", 3, "ode", 0),
10388 RegexRule("^oversee$", 3, "saw", 0),
10389 RegexRule("^overshoot$", 4, "hot", 0),
10390 RegexRule("^overthrow$", 3, "rew", 0),
10391 RegexRule("^overtake$", 3, "ook", 0),
10392 RegexRule("^overwind$", 3, "ound", 0),
10393 RegexRule("^overwrite$", 3, "ote", 0),
10394 RegexRule("^partake$", 3, "ook", 0),
10395 RegexRule("^" + VERBAL_PREFIX + "?run$", 2, "an", 0),
10396 RegexRule("^ring$", 3, "ang", 0),
10397 RegexRule("^rebuild$", 3, "ilt", 0),
10398 RegexRule("^red", 0, "", 0),
10399 RegexRule("^reave$", 4, "eft", 0),
10400 RegexRule("^remake$", 3, "ade", 0),
10401 RegexRule("^resit$", 3, "sat", 0),
10402 RegexRule("^rethink$", 3, "ought", 0),
10403 RegexRule("^retake$", 3, "ook", 0),
10404 RegexRule("^rewind$", 3, "ound", 0),
10405 RegexRule("^rewrite$", 3, "ote", 0),
10406 RegexRule("^ride$", 3, "ode", 0),
10407 RegexRule("^rise$", 3, "ose", 0),
10408 RegexRule("^reeve$", 4, "ove", 0),
10409 RegexRule("^sing$", 3, "ang", 0),
10410 RegexRule("^sink$", 3, "ank", 0),
10411 RegexRule("^sit$", 3, "sat", 0),
10412 RegexRule("^see$", 3, "saw", 0),
10413 RegexRule("^shoe$", 3, "hod", 0),
10414 RegexRule("^shine$", 3, "one", 0),
10415 RegexRule("^shake$", 3, "ook", 0),
10416 RegexRule("^shoot$", 4, "hot", 0),
10417 RegexRule("^shrink$", 3, "ank", 0),
10418 RegexRule("^shrive$", 3, "ove", 0),
10419 RegexRule("^sightsee$", 3, "saw", 0),
10420 RegexRule("^ski$", 1, "i'd", 0),
10421 RegexRule("^skydive$", 3, "ove", 0),
10422 RegexRule("^slay$", 3, "lew", 0),
10423 RegexRule("^slide$", 4, "lid", 0),
10424 RegexRule("^slink$", 3, "unk", 0),
10425 RegexRule("^smite$", 4, "mit", 0),
10426 RegexRule("^seek$", 3, "ought", 0),
10427 RegexRule("^spit$", 3, "pat", 0),
10428 RegexRule("^speed$", 4, "ped", 0),
10429 RegexRule("^spellbind$", 3, "ound", 0),
10430 RegexRule("^spoil$", 2, "ilt", 0),
10431 RegexRule("^speak$", 3, "oke", 0),
10432 RegexRule("^spotlight$", 5, "lit", 0),
10433 RegexRule("^spring$", 3, "ang", 0),
10434 RegexRule("^spin$", 3, "pun", 0),
10435 RegexRule("^stink$", 3, "ank", 0),
10436 RegexRule("^steal$", 3, "ole", 0),
10437 RegexRule("^stand$", 3, "ood", 0),
10438 RegexRule("^stave$", 3, "ove", 0),
10439 RegexRule("^stride$", 3, "ode", 0),
10440 RegexRule("^strive$", 3, "ove", 0),
10441 RegexRule("^strike$", 3, "uck", 0),
10442 RegexRule("^stick$", 3, "uck", 0),
10443 RegexRule("^swim$", 3, "wam", 0),
10444 RegexRule("^swear$", 3, "ore", 0),
10445 RegexRule("^teach$", 4, "aught", 0),
10446 RegexRule("^think$", 3, "ought", 0),
10447 RegexRule("^throw$", 3, "rew", 0),
10448 RegexRule("^take$", 3, "ook", 0),
10449 RegexRule("^tear$", 3, "ore", 0),
10450 RegexRule("^transship$", 4, "hip", 0),
10451 RegexRule("^tread$", 4, "rod", 0),
10452 RegexRule("^typewrite$", 3, "ote", 0),
10453 RegexRule("^unbind$", 3, "ound", 0),
10454 RegexRule("^unclothe$", 5, "lad", 0),
10455 RegexRule("^underbuy$", 2, "ought", 0),
10456 RegexRule("^undergird$", 3, "irt", 0),
10457 RegexRule("^undershoot$", 4, "hot", 0),
10458 RegexRule("^understand$", 3, "ood", 0),
10459 RegexRule("^undertake$", 3, "ook", 0),
10460 RegexRule("^undergo$", 2, "went", 0),
10461 RegexRule("^underwrite$", 3, "ote", 0),
10462 RegexRule("^unfreeze$", 4, "oze", 0),
10463 RegexRule("^unlearn$", 2, "rnt", 0),
10464 RegexRule("^unmake$", 3, "ade", 0),
10465 RegexRule("^unreeve$", 4, "ove", 0),
10466 RegexRule("^unspeak$", 3, "oke", 0),
10467 RegexRule("^unstick$", 3, "uck", 0),
10468 RegexRule("^unswear$", 3, "ore", 0),
10469 RegexRule("^unteach$", 4, "aught", 0),
10470 RegexRule("^unthink$", 3, "ought", 0),
10471 RegexRule("^untread$", 4, "rod", 0),
10472 RegexRule("^unwind$", 3, "ound", 0),
10473 RegexRule("^upbuild$", 3, "ilt", 0),
10474 RegexRule("^uphold$", 3, "eld", 0),
10475 RegexRule("^upheave$", 4, "ove", 0),
10476 RegexRule("^uprise$", 3, "ose", 0),
10477 RegexRule("^upspring$", 3, "ang", 0),
10478 RegexRule("^go$", 2, "went", 0),
10479 RegexRule("^wiredraw$", 3, "rew", 0),
10480 RegexRule("^withdraw$", 3, "rew", 0),
10481 RegexRule("^withhold$", 3, "eld", 0),
10482 RegexRule("^withstand$", 3, "ood", 0),
10483 RegexRule("^wake$", 3, "oke", 0),
10484 RegexRule("^win$", 3, "won", 0),
10485 RegexRule("^wear$", 3, "ore", 0),
10486 RegexRule("^wind$", 3, "ound", 0),
10487 RegexRule("^weave$", 4, "ove", 0),
10488 RegexRule("^write$", 3, "ote", 0),
10489 RegexRule("^trek$", 1, "cked", 0),
10490 RegexRule("^ko$", 1, "o'd", 0),
10491 RegexRule("^bid", 2, "ade", 0),
10492 RegexRule("^win$", 2, "on", 0),
10493 RegexRule("^swim", 2, "am", 0),
10494 // Null past forms
10495 RegexRule("^" + VERBAL_PREFIX
10496 + "?(cast|thrust|typeset|cut|bid|upset|wet|bet|cut|hit|hurt|inset|"
10497 + "let|cost|burst|beat|beset|set|upset|offset|put|quit|wed|typeset|"
10498 + "wed|spread|split|slit|read|run|shut|shed|lay)$", 0, "", 0) ],
10499
10500 PRESENT_TENSE_RULES = [
10501 RegexRule("^aby$", 0, "es", 0),
10502 RegexRule("^bog-down$", 5, "s-down", 0),
10503 RegexRule("^chivy$", 1, "vies", 0),
10504 RegexRule("^gen-up$", 3, "s-up", 0),
10505 RegexRule("^prologue$", 3, "gs", 0),
10506 RegexRule("^picknic$", 0, "ks", 0),
10507 //RegexRule("^swim$", 0, "s", 0),
10508 RegexRule("^ko$", 0, "'s", 0),
10509 RegexRule("[osz]$", 0, "es", 1),
10510 RegexRule("^have$", 2, "s", 0),
10511 RegexRule(CONS + "y$", 1, "ies", 1),
10512 RegexRule("^be$", 2, "is"),
10513 RegexRule("([zsx]|ch|sh)$", 0, "es", 1)
10514 ],
10515
10516 VERB_CONS_DOUBLING = [ "abat", "abet", "abhor", "abut", "accur", "acquit", "adlib",
10517 "admit", "aerobat", "aerosol", "agendaset", "allot", "alot", "anagram",
10518 "annul", "appal", "apparel", "armbar", "aver", "babysit", "airdrop", "appal",
10519 "blackleg", "bobsled", "bur", "chum", "confab", "counterplot", "curet", "dib",
10520 "backdrop", "backfil", "backflip", "backlog", "backpedal", "backslap",
10521 "backstab", "bag", "balfun", "ballot", "ban", "bar", "barbel", "bareleg",
10522 "barrel", "bat", "bayonet", "becom", "bed", "bedevil", "bedwet", "beenhop",
10523 "befit", "befog", "beg", "beget", "begin", "bejewel", "bemedal", "benefit",
10524 "benum", "beset", "besot", "bestir", "bet", "betassel", "bevel", "bewig",
10525 "bib", "bid", "billet", "bin", "bip", "bit", "bitmap", "blab", "blag", "blam",
10526 "blan", "blat", "bles", "blim", "blip", "blob", "bloodlet", "blot", "blub",
10527 "blur", "bob", "bodypop", "bog", "booby-trap", "boobytrap", "booksel",
10528 "bootleg", "bop", "bot", "bowel", "bracket", "brag", "brig", "brim", "bud",
10529 "buffet", "bug", "bullshit", "bum", "bun", "bus", "but", "cab", "cabal", "cam",
10530 "can", "cancel", "cap", "caracol", "caravan", "carburet", "carnap", "carol",
10531 "carpetbag", "castanet", "cat", "catcal", "catnap", "cavil", "chan", "chanel",
10532 "channel", "chap", "char", "chargecap", "chat", "chin", "chip", "chir",
10533 "chirrup", "chisel", "chop", "chug", "chur", "clam", "clap", "clearcut",
10534 "clip", "clodhop", "clog", "clop", "closet", "clot", "club", "co-occur",
10535 "co-program", "co-refer", "co-run", "co-star", "cob", "cobweb", "cod", "coif",
10536 "com", "combat", "comit", "commit", "compel", "con", "concur", "confer",
10537 "confiscat", "control", "cop", "coquet", "coral", "corbel", "corral", "cosset",
10538 "cotransmit", "councel", "council", "counsel", "court-martial", "crab", "cram",
10539 "crap", "crib", "crop", "crossleg", "cub", "cudgel", "cum", "cun", "cup",
10540 "cut", "dab", "dag", "dam", "dan", "dap", "daysit", "de-control", "de-gazet",
10541 "de-hul", "de-instal", "de-mob", "de-program", "de-rig", "de-skil", "deadpan",
10542 "debag", "debar", "log", "decommit", "decontrol", "defer", "defog", "deg",
10543 "degas", "deinstal", "demit", "demob", "demur", "den", "denet", "depig",
10544 "depip", "depit", "der", "deskil", "deter", "devil", "diagram", "dial", "dig",
10545 "dim", "din", "dip", "disbar", "disbud", "discomfit", "disembed", "disembowel",
10546 "dishevel", "disinter", "dispel", "disprefer", "distil", "dog", "dognap",
10547 "don", "doorstep", "dot", "dowel", "drag", "drat", "driftnet", "distil",
10548 "egotrip", "enrol", "enthral", "extol", "fulfil", "gaffe", "golliwog", "idyl",
10549 "inspan", "drip", "drivel", "drop", "drub", "drug", "drum", "dub", "duel",
10550 "dun", "dybbuk", "earwig", "eavesdrop", "ecolabel", "eitherspigot",
10551 "electroblot", "embed", "emit", "empanel", "enamel", "endlabel", "endtrim",
10552 "enrol", "enthral", "entrammel", "entrap", "enwrap", "equal", "equip", "estop",
10553 "exaggerat", "excel", "expel", "extol", "fag", "fan", "farewel", "fat",
10554 "featherbed", "feget", "fet", "fib", "fig", "fin", "fingerspel", "fingertip",
10555 "fit", "flab", "flag", "flap", "flip", "flit", "flog", "flop", "fob", "focus",
10556 "fog", "footbal", "footslog", "fop", "forbid", "forget", "format",
10557 "fortunetel", "fot", "foxtrot", "frag", "freefal", "fret", "frig", "frip",
10558 "frog", "frug", "fuel", "fufil", "fulfil", "fullyfit", "fun", "funnel", "fur",
10559 "furpul", "gab", "gad", "gag", "gam", "gambol", "gap", "garot", "garrot",
10560 "gas", "gat", "gel", "gen", "get", "giftwrap", "gig", "gimbal", "gin", "glam",
10561 "glenden", "glendin", "globetrot", "glug", "glut", "gob", "goldpan", "goostep",
10562 "gossip", "grab", "gravel", "grid", "grin", "grip", "grit", "groundhop",
10563 "grovel", "grub", "gum", "gun", "gunrun", "gut", "gyp", "haircut", "ham",
10564 "han", "handbag", "handicap", "handknit", "handset", "hap", "hareleg", "hat",
10565 "headbut", "hedgehop", "hem", "hen", "hiccup", "highwal", "hip", "hit",
10566 "hobnob", "hog", "hop", "horsewhip", "hostel", "hot", "hotdog", "hovel", "hug",
10567 "hum", "humbug", "hup", "hushkit", "hut", "illfit", "imbed", "immunblot",
10568 "immunoblot", "impannel", "impel", "imperil", "incur", "infer", "infil",
10569 "inflam", "initial", "input", "inset", "instil", "inter", "interbed",
10570 "intercrop", "intercut", "interfer", "instal", "instil", "intermit", "japan",
10571 "jug", "kris", "manumit", "mishit", "mousse", "mud", "interwar", "jab", "jag",
10572 "jam", "jar", "jawdrop", "jet", "jetlag", "jewel", "jib", "jig", "jitterbug",
10573 "job", "jog", "jog-trot", "jot", "jut", "ken", "kennel", "kid", "kidnap",
10574 "kip", "kissogram", "kit", "knap", "kneecap", "knit", "knob", "knot", "kor",
10575 "label", "lag", "lam", "lap", "lavel", "leafcut", "leapfrog", "leg", "lem",
10576 "lep", "let", "level", "libel", "lid", "lig", "lip", "lob", "log", "lok",
10577 "lollop", "longleg", "lop", "lowbal", "lug", "mackerel", "mahom", "man", "map",
10578 "mar", "marshal", "marvel", "mat", "matchwin", "metal", "micro-program",
10579 "microplan", "microprogram", "milksop", "mis-cal", "mis-club", "mis-spel",
10580 "miscal", "mishit", "mislabel", "mit", "mob", "mod", "model", "mohmam",
10581 "monogram", "mop", "mothbal", "mug", "multilevel", "mum", "nab", "nag", "nan",
10582 "nap", "net", "nightclub", "nightsit", "nip", "nod", "nonplus", "norkop",
10583 "nostril", "not", "nut", "nutmeg", "occur", "ocur", "offput", "offset", "omit",
10584 "ommit", "onlap", "out-general", "out-gun", "out-jab", "out-plan", "out-pol",
10585 "out-pul", "out-put", "out-run", "out-sel", "outbid", "outcrop", "outfit",
10586 "outgas", "outgun", "outhit", "outjab", "outpol", "output", "outrun",
10587 "outship", "outshop", "outsin", "outstrip", "outswel", "outspan", "overcrop",
10588 "pettifog", "photostat", "pouf", "preset", "prim", "pug", "ret", "rosin",
10589 "outwit", "over-commit", "over-control", "over-fil", "over-fit", "over-lap",
10590 "over-model", "over-pedal", "over-pet", "over-run", "over-sel", "over-step",
10591 "over-tip", "over-top", "overbid", "overcal", "overcommit", "overcontrol",
10592 "overcrap", "overdub", "overfil", "overhat", "overhit", "overlap", "overman",
10593 "overplot", "overrun", "overshop", "overstep", "overtip", "overtop", "overwet",
10594 "overwil", "pad", "paintbal", "pan", "panel", "paperclip", "par", "parallel",
10595 "parcel", "partiescal", "pat", "patrol", "pedal", "peewit", "peg", "pen",
10596 "pencil", "pep", "permit", "pet", "petal", "photoset", "phototypeset", "phut",
10597 "picket", "pig", "pilot", "pin", "pinbal", "pip", "pipefit", "pipet", "pit",
10598 "plan", "plit", "plod", "plop", "plot", "plug", "plumet", "plummet", "pod",
10599 "policyset", "polyfil", "ponytrek", "pop", "pot", "pram", "prebag",
10600 "predistil", "predril", "prefer", "prefil", "preinstal", "prep", "preplan",
10601 "preprogram", "prizewin", "prod", "profer", "prog", "program", "prop",
10602 "propel", "pub", "pummel", "pun", "pup", "pushfit", "put", "quarel", "quarrel",
10603 "quickskim", "quickstep", "quickwit", "quip", "quit", "quivertip", "quiz",
10604 "rabbit", "rabit", "radiolabel", "rag", "ram", "ramrod", "rap", "rat",
10605 "ratecap", "ravel", "re-admit", "re-cal", "re-cap", "re-channel", "re-dig",
10606 "re-dril", "re-emit", "re-fil", "re-fit", "re-flag", "re-format", "re-fret",
10607 "re-hab", "re-instal", "re-inter", "re-lap", "re-let", "re-map", "re-metal",
10608 "re-model", "re-pastel", "re-plan", "re-plot", "re-plug", "re-pot",
10609 "re-program", "re-refer", "re-rig", "re-rol", "re-run", "re-sel", "re-set",
10610 "re-skin", "re-stal", "re-submit", "re-tel", "re-top", "re-transmit",
10611 "re-trim", "re-wrap", "readmit", "reallot", "rebel", "rebid", "rebin", "rebut",
10612 "recap", "rechannel", "recommit", "recrop", "recur", "recut", "red", "redril",
10613 "refer", "refit", "reformat", "refret", "refuel", "reget", "regret", "reinter",
10614 "rejig", "rekit", "reknot", "relabel", "relet", "rem", "remap", "remetal",
10615 "remit", "remodel", "reoccur", "rep", "repel", "repin", "replan", "replot",
10616 "repol", "repot", "reprogram", "rerun", "reset", "resignal", "resit", "reskil",
10617 "resubmit", "retransfer", "retransmit", "retro-fit", "retrofit", "rev",
10618 "revel", "revet", "rewrap", "rib", "richochet", "ricochet", "rid", "rig",
10619 "rim", "ringlet", "rip", "rit", "rival", "rivet", "roadrun", "rob", "rocket",
10620 "rod", "roset", "rot", "rowel", "rub", "run", "runnel", "rut", "sab", "sad",
10621 "sag", "sandbag", "sap", "scab", "scalpel", "scam", "scan", "scar", "scat",
10622 "schlep", "scrag", "scram", "shall", "sled", "smut", "stet", "sulfuret",
10623 "trepan", "unrip", "unstop", "whir", "whop", "wig", "scrap", "scrat", "scrub",
10624 "scrum", "scud", "scum", "scur", "semi-control", "semi-skil", "semi-skim",
10625 "semiskil", "sentinel", "set", "shag", "sham", "shed", "shim", "shin", "ship",
10626 "shir", "shit", "shlap", "shop", "shopfit", "shortfal", "shot", "shovel",
10627 "shred", "shrinkwrap", "shrivel", "shrug", "shun", "shut", "side-step",
10628 "sideslip", "sidestep", "signal", "sin", "sinbin", "sip", "sit", "skid",
10629 "skim", "skin", "skip", "skir", "skrag", "slab", "slag", "slam", "slap",
10630 "slim", "slip", "slit", "slob", "slog", "slop", "slot", "slowclap", "slug",
10631 "slum", "slur", "smit", "snag", "snap", "snip", "snivel", "snog", "snorkel",
10632 "snowcem", "snub", "snug", "sob", "sod", "softpedal", "son", "sop", "spam",
10633 "span", "spar", "spat", "spiderweb", "spin", "spiral", "spit", "splat",
10634 "split", "spot", "sprag", "spraygun", "sprig", "springtip", "spud", "spur",
10635 "squat", "squirrel", "stab", "stag", "star", "stem", "sten", "stencil", "step",
10636 "stir", "stop", "storytel", "strap", "strim", "strip", "strop", "strug",
10637 "strum", "strut", "stub", "stud", "stun", "sub", "subcrop", "sublet", "submit",
10638 "subset", "suedetrim", "sum", "summit", "sun", "suntan", "sup", "super-chil",
10639 "superad", "swab", "swag", "swan", "swap", "swat", "swig", "swim", "swivel",
10640 "swot", "tab", "tag", "tan", "tansfer", "tap", "tar", "tassel", "tat", "tefer",
10641 "teleshop", "tendril", "terschel", "th'strip", "thermal", "thermostat", "thin",
10642 "throb", "thrum", "thud", "thug", "tightlip", "tin", "tinsel", "tip", "tittup",
10643 "toecap", "tog", "tom", "tomorrow", "top", "tot", "total", "towel", "traget",
10644 "trainspot", "tram", "trammel", "transfer", "tranship", "transit", "transmit",
10645 "transship", "trap", "travel", "trek", "trendset", "trim", "trip", "tripod",
10646 "trod", "trog", "trot", "trousseaushop", "trowel", "trup", "tub", "tug",
10647 "tunnel", "tup", "tut", "twat", "twig", "twin", "twit", "typeset", "tyset",
10648 "un-man", "unban", "unbar", "unbob", "uncap", "unclip", "uncompel", "undam",
10649 "under-bil", "under-cut", "under-fit", "under-pin", "under-skil", "underbid",
10650 "undercut", "underlet", "underman", "underpin", "unfit", "unfulfil", "unknot",
10651 "unlip", "unlywil", "unman", "unpad", "unpeg", "unpin", "unplug", "unravel",
10652 "unrol", "unscrol", "unsnap", "unstal", "unstep", "unstir", "untap", "unwrap",
10653 "unzip", "up", "upset", "upskil", "upwel", "ven", "verbal", "vet", "victual",
10654 "vignet", "wad", "wag", "wainscot", "wan", "war", "water-log", "waterfal",
10655 "waterfil", "waterlog", "weasel", "web", "wed", "wet", "wham", "whet", "whip",
10656 "whir", "whiteskin", "whiz", "whup", "wildcat", "win", "windmil", "wit",
10657 "woodchop", "woodcut", "wor", "worship", "wrap", "wiretap", "yen", "yak",
10658 "yap", "yarnspin", "yip", "yodel", "zag", "zap", "zig", "zig-zag", "zigzag",
10659 "zip", "ztrip", "hand-bag", "hocus", "hocus-pocus" ],
10660
10661 PAST_PARTICIPLE_RULESET = {
10662 name : "PAST_PARTICIPLE",
10663 defaultRule : RegexRule(ANY_STEM, 0, "ed", 2),
10664 rules : PAST_PARTICIPLE_RULES,
10665 doubling : false
10666 },
10667
10668 PRESENT_PARTICIPLE_RULESET = {
10669 name : "ING_FORM",
10670 defaultRule : RegexRule(ANY_STEM, 0, "ing", 2),
10671 rules : ING_FORM_RULES,
10672 doubling : false
10673 },
10674
10675 PAST_TENSE_RULESET = {
10676 name : "PAST_TENSE",
10677 defaultRule : RegexRule(ANY_STEM, 0, "ed", 2),
10678 rules : PAST_TENSE_RULES,
10679 doubling : false
10680 },
10681
10682 PRESENT_TENSE_RULESET = {
10683 name : "PRESENT_TENSE",
10684 defaultRule : RegexRule(ANY_STEM, 0, "s", 2),
10685 rules : PRESENT_TENSE_RULES,
10686 doubling : true
10687 };
10688
10689 //////////////////////////////////////////////////////////////////////////////////
10690 //////// Utility functions
10691 //////////////////////////////////////////////////////////////////////////////////
10692
10693 function isNum(n) {
10694
10695 return !isNaN(parseFloat(n)) && isFinite(n);
10696 }
10697
10698 // Array helpers ////////////////////////////////////////////////////////////////
10699
10700 function shuffle(oldArray) {
10701 var newArray = oldArray.slice();
10702 var len = newArray.length;
10703 var i = len;
10704 while (i--) {
10705 var p = parseInt(Math.random()*len);
10706 var t = newArray[i];
10707 newArray[i] = newArray[p];
10708 newArray[p] = t;
10709 }
10710 return newArray;
10711 }
10712
10713 // Array Remove - from John Resig (MIT Licensed)
10714 function remove(array, from, to) {
10715
10716 // remove? only used once
10717 var rest = array.slice((to || from) + 1 || array.length);
10718 array.length = from < 0 ? array.length + from : from;
10719 return array.push.apply(array, rest);
10720 }
10721
10722 function insert(array, item, idx) {
10723
10724 array.slice(idx,0,item);
10725 return array;
10726 }
10727
10728 function removeFromArray(items, element) {
10729
10730 while (items.indexOf(element) !== -1) {
10731 items.splice(items.indexOf(element), 1);
10732 }
10733 }
10734
10735 function inArray(array, val) {
10736
10737 var i = array.length;
10738 while (i--) {
10739 if (array[i] == val) {
10740 return true;
10741 }
10742 }
10743 return false;
10744 }
10745
10746 // //////////////////////////////////////////////////////////////
10747
10748 function dump(obj) {
10749
10750 var properties = "";
10751 for ( var propertyName in obj) {
10752
10753 properties += propertyName + ": ";
10754
10755 // Check if its NOT a function
10756 if (!(obj[propertyName] instanceof Function)) {
10757 properties += obj.propertyName;
10758 } else {
10759 properties += "function()";
10760 }
10761 properties += ", ";
10762 }
10763 return properties;
10764 }
10765
10766 function asList(array) {
10767
10768 var s="[";
10769 for ( var i = 0; i < array.length; i++) {
10770 var el = array[i];
10771 if (array[i] instanceof Array)
10772 el = asList(array[i]);
10773 s += el;
10774 if (i < array.length-1) s += ", ";
10775 }
10776 return s+"]";
10777 }
10778
10779 function isNull(obj) {
10780
10781 return (typeof obj === 'undefined' || obj === null);
10782 }
10783
10784 function err(msg) {
10785
10786 (!RiTa.SILENT) && console && console.trace(this);
10787 throw Error("[RiTa] " + msg);
10788 }
10789
10790 function warn() {
10791
10792 if (RiTa.SILENT || !console) return;
10793 for ( var i = 0; i < arguments.length; i++) {
10794 console.warn(arguments[i]);
10795 }
10796 }
10797
10798 function log() {
10799
10800 if (RiTa.SILENT || !console) return;
10801 for ( var i = 0; i < arguments.length; i++)
10802 console.log(arguments[i]);
10803 }
10804
10805 function strOk(str) {
10806
10807 return (typeof str === S && str.length > 0);
10808 }
10809
10810 function trim(str) {
10811
10812 // faster version from: http://blog.stevenlevithan.com/archives/faster-trim-javascript
10813 return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
10814 //return str.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, "$1");
10815 }
10816
10817 function last(word) { // last char of string
10818
10819 if (!word || !word.length) return E;
10820 return word.charAt(word.length-1);
10821 }
10822
10823 function extend(l1,l2) { // python extend
10824
10825 for (var i = 0; i < l2.length; i++) {
10826
10827 l1.push(l2[i]);
10828 }
10829 }
10830
10831 function replaceAll(theText, replace, withThis) {
10832
10833 return theText.replace(new RegExp(replace, 'g'), withThis);
10834 }
10835
10836 function endsWith(str, ending) { // test this!!!
10837
10838 return str.slice(-ending.length) == ending;
10839 }
10840
10841 function startsWith(text, substr) {
10842
10843 if (!Type.is(text,S)) return false;
10844 return text.slice(0, substr.length) == substr;
10845 }
10846
10847 function equalsIgnoreCase(str1, str2) {
10848
10849 return (str1.toLowerCase() === str2.toLowerCase());
10850 }
10851
10852 function makeClass() { // By John Resig (MIT Licensed)
10853
10854 return function(args) {
10855
10856 if (this instanceof arguments.callee) {
10857
10858 if (typeof this.initialize == "function") {
10859
10860 this.initialize.apply(this, args && args.callee ? args : arguments);
10861 }
10862 }
10863 else {
10864 return new arguments.callee(arguments);
10865 }
10866 };
10867 }
10868
10869 function parseColor() {
10870
10871 var a = arguments, len = a.length;
10872
10873 //log('parseColor:'+len);
10874
10875 var color = { r: 0, g: 0, b: 0, a: 255 };
10876
10877 if (!len) return color;
10878
10879 if (len == 1 && Type.is(a[0],A)) {
10880 return parseColor.apply(this, a[0]);
10881 }
10882
10883 if (len >= 3) {
10884 color.r = a[0];
10885 color.g = a[1];
10886 color.b = a[2];
10887 }
10888 if (len == 4) {
10889 color.a = a[3];
10890 }
10891 if (len <= 2) {
10892 color.r = a[0];
10893 color.g = a[0];
10894 color.b = a[0];
10895 }
10896 if (len == 2) {
10897 color.a = a[1];
10898 }
10899
10900 return color;
10901 }
10902
10903
10904 function addSpaces(str, num) {
10905
10906 for ( var i = 0; i < num; i++)
10907 str += " ";
10908 return str;
10909 }
10910
10911 LetterToSound.RULES = [
10912
10913 'TOTAL 13100',
10914 'INDEX 0 a',
10915 'STATE 4 r 2 1',
10916 'STATE 6 0 4 3',
10917 'STATE 3 e 6 5',
10918 'STATE 4 u 8 7',
10919 'STATE 4 y 10 9',
10920 'STATE 3 w 12 11',
10921 'STATE 5 t 14 13',
10922 'STATE 3 e 16 15',
10923 'STATE 3 e 18 17',
10924 'STATE 4 # 20 19',
10925 'STATE 3 w 22 21',
10926 'STATE 1 0 24 23',
10927 'STATE 5 e 26 25',
10928 'STATE 5 n 28 27',
10929 'STATE 2 h 29 28',
10930 'STATE 5 e 31 30',
10931 'STATE 2 r 33 32',
10932 'STATE 5 e 35 34',
10933 'STATE 5 t 28 36',
10934 'STATE 3 e 38 37',
10935 'STATE 3 e 40 39',
10936 'STATE 2 c 42 41',
10937 'STATE 2 a 43 42',
10938 'STATE 5 y 45 44',
10939 'STATE 5 r 47 46',
10940 'STATE 5 d 49 48',
10941 'PHONE eh1',
10942 'STATE 5 m 51 50',
10943 'PHONE epsilon',
10944 'PHONE aa1',
10945 'STATE 4 i 53 52',
10946 'STATE 4 g 55 54',
10947 'STATE 4 n 57 56',
10948 'STATE 1 # 59 58',
10949 'STATE 5 g 61 60',
10950 'STATE 1 0 63 62',
10951 'STATE 1 u 29 64',
10952 'STATE 3 o 28 65',
10953 'STATE 4 u 67 66',
10954 'STATE 3 a 29 68',
10955 'STATE 2 l 68 69',
10956 'STATE 1 # 42 70',
10957 'PHONE ey1',
10958 'STATE 1 l 72 71',
10959 'STATE 5 i 74 73',
10960 'STATE 3 n 26 75',
10961 'STATE 5 a 77 76',
10962 'STATE 2 # 79 78',
10963 'STATE 5 i 26 80',
10964 'STATE 1 0 82 81',
10965 'STATE 2 w 28 83',
10966 'STATE 2 r 29 84',
10967 'STATE 5 i 86 85',
10968 'STATE 5 r 88 87',
10969 'STATE 6 # 90 89',
10970 'STATE 1 0 92 91',
10971 'STATE 4 b 94 93',
10972 'STATE 1 # 96 95',
10973 'STATE 4 k 98 97',
10974 'STATE 5 t 100 99',
10975 'STATE 1 0 102 101',
10976 'STATE 2 # 104 103',
10977 'STATE 1 # 63 105',
10978 'PHONE aw1',
10979 'STATE 6 e 107 106',
10980 'STATE 4 w 109 108',
10981 'STATE 4 d 28 110',
10982 'STATE 1 o 111 107',
10983 'PHONE ax',
10984 'STATE 2 y 68 112',
10985 'STATE 2 p 42 113',
10986 'STATE 1 t 72 42',
10987 'PHONE ey',
10988 'STATE 5 e 115 114',
10989 'STATE 6 # 29 116',
10990 'STATE 2 c 26 117',
10991 'STATE 5 i 119 118',
10992 'STATE 3 p 26 120',
10993 'STATE 6 o 100 28',
10994 'STATE 3 n 26 121',
10995 'STATE 1 0 82 122',
10996 'STATE 1 # 82 123',
10997 'PHONE ao1',
10998 'STATE 1 s 125 124',
10999 'STATE 1 # 28 126',
11000 'STATE 4 y 128 127',
11001 'STATE 6 o 130 129',
11002 'STATE 5 n 132 131',
11003 'STATE 3 z 133 26',
11004 'STATE 3 w 135 134',
11005 'STATE 4 t 137 136',
11006 'STATE 1 # 139 138',
11007 'STATE 3 m 100 140',
11008 'STATE 1 i 142 141',
11009 'STATE 1 # 28 68',
11010 'STATE 1 c 28 143',
11011 'STATE 5 d 100 144',
11012 'STATE 4 t 146 145',
11013 'STATE 1 b 42 28',
11014 'STATE 6 n 148 147',
11015 'PHONE ae1',
11016 'STATE 1 # 150 149',
11017 'STATE 3 c 152 151',
11018 'STATE 2 n 154 153',
11019 'STATE 3 l 100 82',
11020 'PHONE aw',
11021 'STATE 1 o 111 155',
11022 'PHONE ow1',
11023 'STATE 1 # 157 156',
11024 'STATE 3 l 82 158',
11025 'STATE 4 n 160 159',
11026 'PHONE ow',
11027 'STATE 1 c 28 68',
11028 'STATE 1 l 162 161',
11029 'STATE 5 r 164 163',
11030 'STATE 6 l 166 165',
11031 'STATE 6 z 28 167',
11032 'STATE 2 e 26 168',
11033 'STATE 5 e 170 169',
11034 'STATE 6 s 172 171',
11035 'STATE 6 # 29 173',
11036 'STATE 3 h 175 174',
11037 'STATE 5 # 28 176',
11038 'STATE 1 r 82 28',
11039 'STATE 5 l 178 177',
11040 'STATE 6 # 179 126',
11041 'PHONE ih1',
11042 'STATE 2 # 181 180',
11043 'STATE 5 a 183 182',
11044 'STATE 6 # 29 184',
11045 'STATE 4 t 186 185',
11046 'STATE 5 l 188 187',
11047 'STATE 3 t 190 189',
11048 'PHONE ay',
11049 'STATE 6 d 192 191',
11050 'STATE 4 t 194 193',
11051 'STATE 3 i 196 195',
11052 'STATE 3 u 198 197',
11053 'STATE 3 i 28 199',
11054 'STATE 2 s 42 200',
11055 'STATE 6 r 42 201',
11056 'STATE 1 t 203 202',
11057 'STATE 2 n 42 204',
11058 'STATE 1 r 68 205',
11059 'STATE 2 d 100 28',
11060 'STATE 5 o 28 206',
11061 'STATE 1 c 42 207',
11062 'STATE 5 e 28 208',
11063 'STATE 4 g 42 28',
11064 'STATE 5 l 210 209',
11065 'STATE 3 h 82 211',
11066 'STATE 2 # 213 212',
11067 'STATE 6 a 82 214',
11068 'STATE 1 # 82 215',
11069 'PHONE ao',
11070 'STATE 2 b 217 216',
11071 'STATE 4 n 219 218',
11072 'STATE 3 a 29 220',
11073 'STATE 1 e 154 82',
11074 'STATE 2 n 222 221',
11075 'STATE 1 c 28 223',
11076 'STATE 3 d 42 224',
11077 'STATE 3 d 225 72',
11078 'STATE 5 t 227 226',
11079 'STATE 2 q 82 228',
11080 'STATE 6 t 28 229',
11081 'STATE 2 c 28 230',
11082 'STATE 6 o 232 231',
11083 'STATE 3 u 26 233',
11084 'STATE 5 o 235 234',
11085 'STATE 6 e 28 236',
11086 'STATE 6 # 29 237',
11087 'STATE 2 # 238 28',
11088 'STATE 6 s 240 239',
11089 'STATE 6 y 26 241',
11090 'STATE 6 e 100 242',
11091 'STATE 2 e 28 243',
11092 'STATE 2 b 245 244',
11093 'STATE 2 p 28 246',
11094 'STATE 2 h 247 28',
11095 'STATE 1 # 249 248',
11096 'STATE 3 w 251 250',
11097 'STATE 5 o 253 252',
11098 'STATE 6 s 230 254',
11099 'STATE 6 z 256 255',
11100 'STATE 4 n 100 257',
11101 'STATE 1 0 100 258',
11102 'STATE 6 # 260 259',
11103 'STATE 3 m 261 42',
11104 'STATE 1 a 263 262',
11105 'STATE 2 s 42 264',
11106 'STATE 6 s 266 265',
11107 'STATE 4 t 268 267',
11108 'STATE 4 l 68 42',
11109 'STATE 2 t 29 82',
11110 'STATE 3 o 28 269',
11111 'STATE 4 l 29 100',
11112 'STATE 3 t 42 270',
11113 'STATE 2 t 42 271',
11114 'STATE 6 n 68 272',
11115 'STATE 3 r 42 273',
11116 'STATE 6 # 42 274',
11117 'STATE 1 # 28 275',
11118 'STATE 4 t 276 28',
11119 'STATE 4 s 28 277',
11120 'STATE 2 c 68 278',
11121 'STATE 4 n 68 279',
11122 'STATE 1 t 28 280',
11123 'STATE 5 s 68 281',
11124 'STATE 6 # 283 282',
11125 'STATE 3 n 107 284',
11126 'STATE 2 c 82 285',
11127 'STATE 5 t 82 286',
11128 'STATE 5 n 82 287',
11129 'STATE 5 s 29 288',
11130 'STATE 2 e 154 289',
11131 'STATE 1 e 111 107',
11132 'STATE 5 c 107 290',
11133 'STATE 4 l 292 291',
11134 'STATE 3 m 68 293',
11135 'STATE 4 u 63 294',
11136 'STATE 1 a 28 295',
11137 'STATE 1 i 68 28',
11138 'STATE 1 # 28 296',
11139 'STATE 2 t 42 297',
11140 'STATE 2 i 72 42',
11141 'STATE 3 o 28 298',
11142 'STATE 2 q 82 299',
11143 'STATE 1 r 26 300',
11144 'STATE 1 c 302 301',
11145 'PHONE aa',
11146 'STATE 6 a 26 303',
11147 'STATE 3 s 29 304',
11148 'STATE 3 r 26 305',
11149 'STATE 5 y 307 306',
11150 'STATE 6 l 309 308',
11151 'STATE 2 # 311 310',
11152 'STATE 3 v 313 312',
11153 'STATE 3 p 28 26',
11154 'STATE 6 b 100 314',
11155 'STATE 3 h 28 29',
11156 'STATE 6 i 316 315',
11157 'STATE 6 o 26 100',
11158 'STATE 1 # 82 317',
11159 'STATE 5 c 28 318',
11160 'STATE 5 d 126 28',
11161 'STATE 1 # 319 28',
11162 'PHONE ih',
11163 'STATE 5 o 321 320',
11164 'STATE 3 o 323 322',
11165 'STATE 4 w 325 324',
11166 'STATE 4 l 327 326',
11167 'STATE 5 r 328 42',
11168 'STATE 2 # 42 329',
11169 'STATE 2 a 331 330',
11170 'STATE 6 n 333 332',
11171 'STATE 1 0 100 68',
11172 'STATE 1 0 335 334',
11173 'STATE 3 n 337 336',
11174 'STATE 5 o 28 338',
11175 'STATE 5 a 29 42',
11176 'STATE 2 e 72 42',
11177 'STATE 6 g 29 339',
11178 'STATE 3 r 42 340',
11179 'STATE 6 e 42 341',
11180 'STATE 4 k 343 342',
11181 'STATE 4 t 345 344',
11182 'STATE 3 o 28 346',
11183 'STATE 3 o 28 42',
11184 'STATE 2 a 348 347',
11185 'STATE 2 i 350 349',
11186 'STATE 1 a 42 68',
11187 'STATE 6 r 352 351',
11188 'STATE 3 l 100 68',
11189 'STATE 2 # 354 353',
11190 'STATE 2 m 42 355',
11191 'STATE 5 r 100 68',
11192 'STATE 4 l 28 68',
11193 'STATE 2 g 68 356',
11194 'STATE 4 l 28 357',
11195 'STATE 5 h 28 358',
11196 'STATE 4 p 68 359',
11197 'STATE 5 s 361 360',
11198 'STATE 5 d 107 362',
11199 'STATE 3 s 82 363',
11200 'STATE 6 e 365 364',
11201 'STATE 5 d 82 366',
11202 'STATE 5 r 368 367',
11203 'STATE 5 l 29 82',
11204 'STATE 2 o 154 369',
11205 'STATE 6 o 107 370',
11206 'STATE 4 s 372 371',
11207 'STATE 3 h 373 68',
11208 'STATE 3 i 68 374',
11209 'STATE 4 i 28 375',
11210 'STATE 4 k 28 376',
11211 'STATE 1 o 68 377',
11212 'STATE 1 c 42 378',
11213 'STATE 1 # 380 379',
11214 'STATE 1 # 29 381',
11215 'STATE 1 e 383 382',
11216 'STATE 6 # 385 384',
11217 'STATE 3 s 29 230',
11218 'STATE 6 c 387 386',
11219 'STATE 3 c 26 388',
11220 'STATE 2 i 26 389',
11221 'STATE 5 u 391 390',
11222 'STATE 6 # 26 392',
11223 'STATE 6 # 29 393',
11224 'STATE 3 p 28 394',
11225 'STATE 6 n 28 230',
11226 'STATE 3 m 230 395',
11227 'STATE 6 t 26 396',
11228 'STATE 6 e 28 26',
11229 'STATE 2 # 398 397',
11230 'STATE 3 m 400 399',
11231 'STATE 3 m 26 401',
11232 'STATE 2 h 82 402',
11233 'STATE 5 s 404 403',
11234 'STATE 6 e 28 126',
11235 'STATE 5 l 406 405',
11236 'STATE 6 # 29 407',
11237 'STATE 4 w 409 408',
11238 'STATE 2 j 29 28',
11239 'STATE 4 l 411 410',
11240 'STATE 5 a 413 412',
11241 'STATE 4 g 100 414',
11242 'STATE 6 o 288 82',
11243 'STATE 6 e 26 42',
11244 'STATE 6 # 42 415',
11245 'STATE 3 r 42 416',
11246 'STATE 6 # 29 68',
11247 'STATE 6 a 418 417',
11248 'STATE 4 t 420 419',
11249 'STATE 2 t 100 421',
11250 'STATE 4 d 42 422',
11251 'STATE 3 u 42 423',
11252 'STATE 2 i 42 424',
11253 'STATE 6 a 426 425',
11254 'STATE 2 a 26 427',
11255 'STATE 3 g 68 42',
11256 'STATE 1 u 68 428',
11257 'STATE 4 y 42 429',
11258 'STATE 3 m 42 430',
11259 'STATE 4 w 82 431',
11260 'STATE 3 u 42 432',
11261 'STATE 4 w 82 433',
11262 'STATE 1 0 42 434',
11263 'STATE 1 l 29 435',
11264 'STATE 3 n 437 436',
11265 'STATE 3 d 42 438',
11266 'STATE 6 o 42 439',
11267 'STATE 2 l 247 440',
11268 'STATE 6 n 68 42',
11269 'STATE 6 n 442 441',
11270 'STATE 1 a 444 443',
11271 'STATE 5 s 68 28',
11272 'STATE 5 t 445 28',
11273 'STATE 1 h 28 68',
11274 'STATE 4 f 68 446',
11275 'STATE 2 s 28 447',
11276 'STATE 6 t 82 448',
11277 'STATE 3 n 82 449',
11278 'STATE 6 t 450 82',
11279 'STATE 5 s 452 451',
11280 'STATE 5 b 63 453',
11281 'STATE 6 t 455 454',
11282 'STATE 5 l 457 456',
11283 'STATE 3 l 82 458',
11284 'STATE 1 0 460 459',
11285 'STATE 1 # 111 107',
11286 'STATE 4 u 105 461',
11287 'STATE 3 a 230 462',
11288 'STATE 2 t 463 68',
11289 'STATE 1 n 465 464',
11290 'STATE 4 o 28 466',
11291 'STATE 4 t 28 467',
11292 'STATE 2 r 28 468',
11293 'STATE 1 e 42 469',
11294 'STATE 6 e 471 470',
11295 'STATE 5 a 473 472',
11296 'STATE 3 p 29 474',
11297 'STATE 2 c 476 475',
11298 'STATE 2 r 100 26',
11299 'STATE 3 v 29 477',
11300 'STATE 3 c 26 478',
11301 'STATE 1 i 26 479',
11302 'STATE 2 a 28 100',
11303 'STATE 3 l 29 26',
11304 'STATE 2 s 26 480',
11305 'STATE 3 h 482 481',
11306 'STATE 6 s 230 28',
11307 'STATE 3 m 100 26',
11308 'STATE 6 s 230 483',
11309 'STATE 3 c 26 484',
11310 'STATE 6 l 230 485',
11311 'STATE 6 b 100 486',
11312 'STATE 6 m 26 28',
11313 'STATE 3 n 230 487',
11314 'STATE 3 g 100 488',
11315 'STATE 6 o 230 29',
11316 'STATE 3 p 29 100',
11317 'STATE 5 t 28 29',
11318 'STATE 5 r 28 489',
11319 'STATE 6 # 126 28',
11320 'STATE 1 0 491 490',
11321 'STATE 4 b 493 492',
11322 'STATE 4 t 495 494',
11323 'STATE 4 l 497 496',
11324 'STATE 5 a 68 498',
11325 'STATE 5 a 500 499',
11326 'STATE 5 a 502 501',
11327 'STATE 6 r 68 503',
11328 'STATE 3 k 29 68',
11329 'STATE 5 t 505 504',
11330 'STATE 1 # 42 72',
11331 'STATE 3 p 42 28',
11332 'STATE 6 v 507 506',
11333 'STATE 2 # 509 508',
11334 'STATE 3 o 28 510',
11335 'STATE 1 0 512 511',
11336 'STATE 3 n 29 513',
11337 'STATE 4 v 42 514',
11338 'STATE 1 i 515 42',
11339 'STATE 1 e 100 516',
11340 'STATE 5 s 518 517',
11341 'STATE 3 m 42 519',
11342 'STATE 3 m 42 520',
11343 'STATE 1 0 42 521',
11344 'STATE 2 # 523 522',
11345 'STATE 2 # 525 524',
11346 'STATE 4 l 527 526',
11347 'STATE 1 t 529 528',
11348 'STATE 4 x 100 530',
11349 'STATE 2 i 532 531',
11350 'STATE 4 l 29 533',
11351 'STATE 3 r 535 534',
11352 'STATE 2 e 42 536',
11353 'STATE 1 c 42 537',
11354 'STATE 2 s 539 538',
11355 'STATE 3 l 72 540',
11356 'STATE 3 h 100 541',
11357 'STATE 3 h 42 100',
11358 'STATE 4 d 28 542',
11359 'STATE 4 t 68 28',
11360 'STATE 1 b 28 100',
11361 'STATE 5 l 100 543',
11362 'STATE 6 h 105 544',
11363 'STATE 3 h 63 545',
11364 'STATE 3 b 63 546',
11365 'STATE 3 f 82 107',
11366 'STATE 5 t 547 82',
11367 'STATE 2 k 63 82',
11368 'STATE 2 k 63 548',
11369 'STATE 5 r 82 549',
11370 'STATE 5 s 82 498',
11371 'STATE 3 g 551 550',
11372 'STATE 6 i 82 552',
11373 'STATE 6 e 105 82',
11374 'STATE 2 c 82 553',
11375 'STATE 6 u 82 554',
11376 'STATE 4 i 556 555',
11377 'STATE 3 v 558 557',
11378 'STATE 1 n 29 82',
11379 'STATE 2 s 560 559',
11380 'STATE 3 h 562 561',
11381 'STATE 3 i 68 563',
11382 'STATE 1 e 68 564',
11383 'STATE 1 a 68 565',
11384 'STATE 1 t 42 566',
11385 'STATE 3 l 568 567',
11386 'STATE 3 b 569 29',
11387 'STATE 5 o 571 570',
11388 'STATE 6 # 29 572',
11389 'STATE 3 c 29 573',
11390 'STATE 3 h 100 574',
11391 'STATE 6 i 100 575',
11392 'STATE 3 p 26 576',
11393 'STATE 3 f 26 577',
11394 'STATE 3 l 579 578',
11395 'STATE 2 u 26 580',
11396 'STATE 5 k 29 581',
11397 'STATE 6 o 582 29',
11398 'STATE 6 u 28 583',
11399 'STATE 3 k 26 100',
11400 'STATE 6 # 26 584',
11401 'STATE 6 e 26 585',
11402 'STATE 6 c 230 586',
11403 'STATE 6 # 29 587',
11404 'STATE 2 l 589 588',
11405 'STATE 3 o 591 590',
11406 'STATE 4 l 593 592',
11407 'STATE 6 y 595 594',
11408 'STATE 6 i 100 596',
11409 'STATE 6 s 598 597',
11410 'STATE 6 r 600 599',
11411 'STATE 2 t 602 601',
11412 'STATE 2 s 604 603',
11413 'STATE 5 c 29 82',
11414 'STATE 5 o 606 605',
11415 'STATE 6 # 608 607',
11416 'STATE 5 o 610 609',
11417 'STATE 6 # 29 611',
11418 'STATE 5 h 82 612',
11419 'STATE 4 c 614 613',
11420 'STATE 4 s 42 29',
11421 'STATE 6 e 616 615',
11422 'STATE 4 t 618 617',
11423 'STATE 4 z 29 619',
11424 'STATE 3 r 42 620',
11425 'STATE 4 g 622 621',
11426 'STATE 3 u 623 42',
11427 'STATE 3 l 230 42',
11428 'STATE 4 z 100 624',
11429 'STATE 2 # 230 29',
11430 'STATE 2 r 625 42',
11431 'STATE 1 d 100 42',
11432 'STATE 5 a 28 626',
11433 'STATE 6 t 29 627',
11434 'STATE 1 # 42 628',
11435 'STATE 3 l 629 42',
11436 'STATE 6 t 68 630',
11437 'STATE 1 # 632 631',
11438 'STATE 6 k 634 633',
11439 'STATE 1 # 42 635',
11440 'STATE 3 t 42 636',
11441 'STATE 4 n 638 637',
11442 'STATE 1 0 640 639',
11443 'STATE 3 g 642 641',
11444 'STATE 3 m 68 42',
11445 'STATE 1 0 644 643',
11446 'STATE 3 a 29 645',
11447 'STATE 4 l 29 42',
11448 'STATE 4 c 29 646',
11449 'STATE 3 l 42 647',
11450 'STATE 2 a 68 648',
11451 'STATE 1 i 68 649',
11452 'STATE 3 m 68 650',
11453 'STATE 1 e 652 651',
11454 'STATE 3 s 331 42',
11455 'STATE 3 r 29 653',
11456 'STATE 3 p 100 42',
11457 'STATE 6 o 28 654',
11458 'STATE 6 g 68 655',
11459 'STATE 2 e 657 656',
11460 'STATE 3 r 63 82',
11461 'STATE 5 s 659 658',
11462 'STATE 2 t 63 82',
11463 'STATE 3 r 82 63',
11464 'STATE 5 b 82 660',
11465 'STATE 3 s 662 661',
11466 'STATE 5 c 63 663',
11467 'STATE 6 t 82 664',
11468 'STATE 1 o 154 665',
11469 'STATE 6 m 230 82',
11470 'STATE 4 o 667 666',
11471 'STATE 2 a 29 28',
11472 'STATE 3 j 230 68',
11473 'STATE 2 i 230 68',
11474 'STATE 3 h 669 668',
11475 'STATE 3 s 68 670',
11476 'STATE 3 g 672 671',
11477 'PHONE ae',
11478 'STATE 3 u 29 673',
11479 'STATE 4 m 28 674',
11480 'STATE 1 e 28 68',
11481 'STATE 2 o 42 675',
11482 'STATE 3 p 677 676',
11483 'STATE 2 u 28 678',
11484 'STATE 1 e 230 29',
11485 'STATE 2 s 680 679',
11486 'STATE 3 h 26 29',
11487 'STATE 3 h 682 681',
11488 'STATE 2 g 28 683',
11489 'STATE 6 # 100 684',
11490 'STATE 6 e 26 100',
11491 'STATE 1 # 686 685',
11492 'STATE 1 # 26 687',
11493 'STATE 6 e 26 688',
11494 'STATE 6 t 26 689',
11495 'STATE 3 i 28 690',
11496 'STATE 6 s 29 691',
11497 'STATE 5 b 29 692',
11498 'STATE 3 m 28 693',
11499 'STATE 3 l 28 694',
11500 'STATE 6 c 100 695',
11501 'STATE 3 c 100 696',
11502 'STATE 6 e 698 697',
11503 'STATE 1 n 28 699',
11504 'STATE 1 c 126 700',
11505 'STATE 4 n 702 701',
11506 'STATE 5 t 704 703',
11507 'STATE 4 e 28 705',
11508 'STATE 5 a 707 706',
11509 'STATE 4 l 709 708',
11510 'STATE 3 c 28 68',
11511 'STATE 1 0 42 68',
11512 'STATE 4 g 711 710',
11513 'STATE 4 g 230 712',
11514 'STATE 2 e 68 713',
11515 'STATE 1 d 42 714',
11516 'STATE 4 a 28 715',
11517 'STATE 5 s 717 716',
11518 'STATE 6 # 719 718',
11519 'STATE 3 t 82 720',
11520 'STATE 4 a 28 721',
11521 'STATE 6 # 29 722',
11522 'STATE 3 v 724 723',
11523 'STATE 4 n 100 29',
11524 'STATE 5 m 726 725',
11525 'STATE 6 # 29 727',
11526 'STATE 3 b 100 728',
11527 'STATE 3 p 729 82',
11528 'STATE 4 a 28 730',
11529 'STATE 5 h 82 100',
11530 'STATE 6 c 732 731',
11531 'STATE 4 n 734 733',
11532 'STATE 4 s 42 735',
11533 'STATE 2 r 68 736',
11534 'STATE 3 t 738 737',
11535 'STATE 3 m 740 739',
11536 'STATE 4 w 82 741',
11537 'STATE 2 i 100 742',
11538 'PHONE w-ey1',
11539 'STATE 1 o 42 743',
11540 'STATE 3 m 42 100',
11541 'STATE 6 s 42 744',
11542 'STATE 3 m 42 745',
11543 'STATE 3 r 42 28',
11544 'STATE 2 p 42 746',
11545 'STATE 1 o 42 747',
11546 'STATE 1 0 749 748',
11547 'STATE 6 r 751 750',
11548 'STATE 3 v 753 752',
11549 'STATE 4 c 29 754',
11550 'STATE 6 n 42 755',
11551 'STATE 3 l 42 756',
11552 'STATE 4 x 100 757',
11553 'STATE 2 0 100 758',
11554 'STATE 2 o 29 759',
11555 'STATE 2 # 42 230',
11556 'STATE 2 c 42 760',
11557 'STATE 2 e 68 42',
11558 'STATE 4 l 68 761',
11559 'STATE 3 m 100 762',
11560 'STATE 1 # 42 763',
11561 'STATE 4 d 42 740',
11562 'STATE 3 i 765 764',
11563 'STATE 2 u 68 766',
11564 'STATE 1 t 68 42',
11565 'STATE 1 t 42 767',
11566 'STATE 2 e 247 768',
11567 'STATE 3 g 42 247',
11568 'STATE 3 n 68 247',
11569 'STATE 5 h 28 769',
11570 'STATE 6 u 68 28',
11571 'STATE 2 t 105 770',
11572 'STATE 6 e 771 82',
11573 'STATE 3 h 107 772',
11574 'STATE 3 h 63 105',
11575 'STATE 6 i 63 773',
11576 'STATE 6 # 82 774',
11577 'STATE 5 t 154 82',
11578 'STATE 5 d 111 775',
11579 'STATE 6 e 82 776',
11580 'STATE 2 a 154 777',
11581 'STATE 4 e 628 778',
11582 'STATE 2 a 28 105',
11583 'STATE 3 w 780 779',
11584 'STATE 1 l 562 781',
11585 'STATE 3 t 100 782',
11586 'STATE 2 a 100 68',
11587 'STATE 2 i 68 562',
11588 'STATE 3 h 100 783',
11589 'STATE 1 # 28 784',
11590 'STATE 3 l 786 785',
11591 'STATE 5 k 788 787',
11592 'STATE 5 a 790 789',
11593 'STATE 2 c 28 791',
11594 'STATE 3 h 29 792',
11595 'STATE 3 c 793 29',
11596 'STATE 2 g 26 28',
11597 'STATE 6 c 26 28',
11598 'STATE 6 y 29 794',
11599 'STATE 2 a 795 29',
11600 'STATE 1 e 26 796',
11601 'STATE 3 h 26 797',
11602 'STATE 3 m 26 798',
11603 'STATE 6 u 26 799',
11604 'STATE 1 # 26 28',
11605 'STATE 1 a 28 800',
11606 'STATE 5 c 802 801',
11607 'STATE 5 p 230 29',
11608 'STATE 3 l 100 803',
11609 'STATE 3 p 804 26',
11610 'STATE 3 c 230 805',
11611 'STATE 3 t 230 806',
11612 'STATE 3 d 100 807',
11613 'STATE 3 f 26 808',
11614 'STATE 2 t 28 809',
11615 'STATE 1 # 126 28',
11616 'STATE 5 a 811 810',
11617 'STATE 5 g 813 812',
11618 'STATE 4 n 68 28',
11619 'STATE 2 c 28 100',
11620 'STATE 4 n 815 814',
11621 'STATE 5 t 817 816',
11622 'STATE 6 r 68 818',
11623 'STATE 4 h 820 819',
11624 'STATE 6 # 822 821',
11625 'STATE 2 a 824 823',
11626 'STATE 6 n 100 68',
11627 'STATE 1 o 100 825',
11628 'STATE 2 u 68 826',
11629 'STATE 2 t 42 827',
11630 'STATE 3 i 829 828',
11631 'STATE 5 a 230 830',
11632 'STATE 6 o 100 831',
11633 'STATE 5 t 82 832',
11634 'STATE 5 a 29 833',
11635 'STATE 3 m 82 834',
11636 'STATE 4 e 836 835',
11637 'STATE 6 r 838 837',
11638 'STATE 6 n 840 839',
11639 'STATE 4 c 72 841',
11640 'STATE 5 d 843 842',
11641 'STATE 6 a 100 844',
11642 'STATE 6 s 68 845',
11643 'STATE 6 s 29 846',
11644 'STATE 5 l 230 82',
11645 'STATE 5 g 100 847',
11646 'STATE 6 t 849 848',
11647 'STATE 4 t 100 850',
11648 'STATE 1 0 852 851',
11649 'STATE 1 0 853 68',
11650 'STATE 4 l 68 230',
11651 'STATE 2 e 68 854',
11652 'STATE 4 n 856 855',
11653 'STATE 4 l 858 857',
11654 'STATE 3 d 42 859',
11655 'STATE 4 n 42 29',
11656 'STATE 4 y 42 860',
11657 'STATE 1 0 100 247',
11658 'STATE 4 c 42 861',
11659 'STATE 6 n 42 862',
11660 'STATE 3 n 42 863',
11661 'STATE 6 e 42 68',
11662 'STATE 6 i 42 864',
11663 'STATE 3 o 28 865',
11664 'STATE 4 m 867 866',
11665 'STATE 2 s 869 868',
11666 'STATE 3 o 28 870',
11667 'STATE 6 l 872 871',
11668 'STATE 4 l 873 562',
11669 'STATE 4 s 29 100',
11670 'STATE 3 b 42 68',
11671 'STATE 3 b 42 100',
11672 'STATE 4 j 68 874',
11673 'STATE 2 e 68 875',
11674 'STATE 1 # 68 876',
11675 'STATE 3 l 878 877',
11676 'STATE 4 h 68 879',
11677 'STATE 4 l 100 880',
11678 'STATE 4 c 882 881',
11679 'STATE 2 e 42 883',
11680 'STATE 2 c 42 884',
11681 'STATE 1 t 68 885',
11682 'STATE 1 d 42 886',
11683 'STATE 3 p 42 887',
11684 'STATE 1 u 28 888',
11685 'STATE 1 r 29 889',
11686 'STATE 3 l 105 82',
11687 'STATE 3 r 63 771',
11688 'STATE 5 s 63 890',
11689 'STATE 5 m 63 891',
11690 'STATE 5 t 82 63',
11691 'STATE 6 # 82 892',
11692 'STATE 2 r 154 82',
11693 'STATE 4 k 894 893',
11694 'STATE 3 g 68 895',
11695 'STATE 2 o 68 896',
11696 'STATE 1 u 68 897',
11697 'STATE 3 c 100 68',
11698 'STATE 3 w 29 898',
11699 'STATE 4 f 28 899',
11700 'STATE 1 u 901 900',
11701 'STATE 1 i 42 902',
11702 'STATE 5 a 904 903',
11703 'STATE 3 m 29 905',
11704 'STATE 2 p 28 906',
11705 'STATE 6 g 26 28',
11706 'STATE 1 o 28 907',
11707 'STATE 3 u 29 908',
11708 'STATE 6 e 29 909',
11709 'STATE 1 n 29 910',
11710 'STATE 3 v 28 230',
11711 'STATE 6 s 29 28',
11712 'STATE 3 l 26 911',
11713 'STATE 2 s 26 29',
11714 'STATE 6 l 26 912',
11715 'STATE 2 a 28 913',
11716 'STATE 6 a 915 914',
11717 'STATE 3 m 917 916',
11718 'STATE 6 t 100 918',
11719 'STATE 6 n 28 26',
11720 'STATE 6 m 28 919',
11721 'STATE 6 h 100 920',
11722 'STATE 3 p 26 921',
11723 'STATE 3 c 230 922',
11724 'STATE 6 n 126 923',
11725 'STATE 4 l 925 924',
11726 'STATE 6 # 927 926',
11727 'STATE 6 # 929 928',
11728 'STATE 6 e 931 930',
11729 'STATE 4 a 28 932',
11730 'STATE 5 y 26 933',
11731 'STATE 5 d 935 934',
11732 'STATE 6 e 82 936',
11733 'STATE 6 n 230 937',
11734 'STATE 4 e 939 938',
11735 'STATE 6 # 940 29',
11736 'STATE 6 s 82 941',
11737 'STATE 3 b 82 942',
11738 'STATE 1 0 944 943',
11739 'STATE 1 p 68 945',
11740 'STATE 4 p 68 946',
11741 'STATE 2 o 68 947',
11742 'STATE 2 i 949 948',
11743 'STATE 4 e 951 950',
11744 'STATE 2 d 953 952',
11745 'STATE 5 o 29 954',
11746 'STATE 6 l 562 955',
11747 'STATE 3 n 68 956',
11748 'STATE 5 l 82 68',
11749 'STATE 5 a 29 957',
11750 'STATE 4 h 959 958',
11751 'STATE 3 m 28 960',
11752 'STATE 6 s 962 961',
11753 'STATE 4 n 100 963',
11754 'STATE 6 s 965 964',
11755 'STATE 3 p 230 966',
11756 'STATE 4 n 562 100',
11757 'STATE 5 v 968 967',
11758 'STATE 6 a 230 969',
11759 'STATE 3 c 29 970',
11760 'STATE 6 m 230 971',
11761 'STATE 3 t 230 972',
11762 'STATE 6 # 29 973',
11763 'STATE 1 0 975 974',
11764 'STATE 2 q 29 976',
11765 'STATE 4 s 756 977',
11766 'STATE 1 # 979 978',
11767 'STATE 4 v 42 980',
11768 'STATE 3 d 100 562',
11769 'STATE 1 c 68 981',
11770 'STATE 2 o 29 982',
11771 'STATE 3 m 42 983',
11772 'STATE 2 s 29 42',
11773 'STATE 1 r 100 29',
11774 'STATE 3 f 230 984',
11775 'STATE 4 k 42 985',
11776 'STATE 2 e 42 986',
11777 'STATE 3 b 28 987',
11778 'STATE 3 c 42 988',
11779 'STATE 2 t 42 989',
11780 'STATE 4 i 28 990',
11781 'STATE 4 d 100 991',
11782 'STATE 6 l 68 992',
11783 'STATE 3 r 994 993',
11784 'STATE 3 p 42 995',
11785 'STATE 3 x 100 996',
11786 'STATE 3 m 998 997',
11787 'STATE 3 l 1000 999',
11788 'STATE 6 r 68 100',
11789 'STATE 3 r 42 1001',
11790 'STATE 3 r 42 1002',
11791 'STATE 2 n 68 29',
11792 'STATE 2 i 529 42',
11793 'STATE 1 m 42 1003',
11794 'STATE 4 m 1005 1004',
11795 'STATE 2 # 42 68',
11796 'STATE 3 d 42 1006',
11797 'STATE 2 p 42 1007',
11798 'STATE 1 l 72 1008',
11799 'STATE 1 e 68 42',
11800 'STATE 1 d 68 42',
11801 'STATE 3 n 42 1009',
11802 'STATE 3 r 1011 1010',
11803 'STATE 2 n 1012 28',
11804 'STATE 5 d 82 1013',
11805 'STATE 6 e 63 82',
11806 'STATE 6 u 29 1014',
11807 'STATE 6 k 82 1015',
11808 'STATE 4 h 1017 1016',
11809 'STATE 3 i 562 1018',
11810 'STATE 3 f 100 1019',
11811 'STATE 2 e 68 230',
11812 'STATE 1 e 68 1020',
11813 'STATE 2 o 68 1021',
11814 'STATE 4 l 28 1022',
11815 'STATE 2 r 42 1023',
11816 'STATE 2 r 28 42',
11817 'STATE 1 a 72 42',
11818 'STATE 5 o 1025 1024',
11819 'STATE 6 # 29 1026',
11820 'STATE 2 m 29 230',
11821 'STATE 5 o 28 1027',
11822 'STATE 6 o 29 1028',
11823 'STATE 3 l 29 1029',
11824 'STATE 6 i 230 29',
11825 'STATE 2 i 230 1030',
11826 'STATE 6 d 26 28',
11827 'STATE 6 t 1032 1031',
11828 'STATE 1 u 28 1033',
11829 'STATE 6 o 1035 1034',
11830 'STATE 5 j 29 1036',
11831 'STATE 3 s 230 909',
11832 'STATE 6 e 230 1037',
11833 'STATE 3 g 230 1038',
11834 'STATE 6 z 28 1039',
11835 'STATE 3 s 26 1040',
11836 'STATE 6 u 230 1041',
11837 'STATE 3 b 100 29',
11838 'STATE 6 # 1042 126',
11839 'STATE 4 a 28 1043',
11840 'STATE 5 s 1045 1044',
11841 'STATE 6 b 1047 1046',
11842 'STATE 4 h 230 29',
11843 'STATE 5 c 1049 1048',
11844 'STATE 5 a 1051 1050',
11845 'STATE 6 # 100 1052',
11846 'STATE 3 l 100 1053',
11847 'STATE 4 m 1055 1054',
11848 'STATE 5 t 1057 1056',
11849 'STATE 5 m 1059 1058',
11850 'STATE 6 e 82 1060',
11851 'STATE 6 a 82 1061',
11852 'STATE 6 m 100 68',
11853 'STATE 4 w 82 1062',
11854 'STATE 2 c 68 1063',
11855 'STATE 2 r 230 1064',
11856 'STATE 2 h 82 1065',
11857 'STATE 3 f 82 1066',
11858 'STATE 4 b 1068 1067',
11859 'STATE 6 i 1070 1069',
11860 'STATE 6 t 230 1071',
11861 'STATE 4 d 29 1072',
11862 'STATE 1 o 68 1073',
11863 'STATE 3 l 1075 1074',
11864 'STATE 1 p 68 1076',
11865 'STATE 3 w 1078 1077',
11866 'STATE 3 r 28 1079',
11867 'STATE 2 c 82 1080',
11868 'STATE 6 n 1082 1081',
11869 'STATE 4 c 1084 1083',
11870 'STATE 6 c 562 1085',
11871 'STATE 6 n 68 1086',
11872 'STATE 3 c 1088 1087',
11873 'STATE 4 n 1090 1089',
11874 'STATE 6 a 1092 1091',
11875 'STATE 3 h 28 1093',
11876 'STATE 6 o 1095 1094',
11877 'STATE 4 n 1097 1096',
11878 'STATE 3 f 42 1098',
11879 'STATE 4 t 1100 1099',
11880 'STATE 4 n 100 1101',
11881 'STATE 4 v 68 1102',
11882 'STATE 6 e 1104 1103',
11883 'STATE 3 m 29 1105',
11884 'STATE 3 v 230 1106',
11885 'STATE 3 b 29 1107',
11886 'STATE 3 s 68 1108',
11887 'STATE 3 s 100 1109',
11888 'STATE 4 n 29 1110',
11889 'STATE 6 u 42 1111',
11890 'STATE 6 s 1113 1112',
11891 'STATE 4 d 68 1114',
11892 'STATE 2 t 68 1115',
11893 'STATE 4 t 42 1116',
11894 'STATE 4 z 42 193',
11895 'STATE 4 l 1118 1117',
11896 'STATE 2 i 1120 1119',
11897 'STATE 2 s 29 1121',
11898 'STATE 2 l 42 1122',
11899 'STATE 4 n 29 100',
11900 'STATE 1 # 1124 1123',
11901 'STATE 2 b 29 1125',
11902 'STATE 3 n 42 1126',
11903 'STATE 1 0 1127 42',
11904 'STATE 2 r 42 68',
11905 'STATE 6 z 29 1128',
11906 'STATE 4 n 100 1129',
11907 'STATE 6 n 68 873',
11908 'STATE 6 n 1131 1130',
11909 'STATE 6 l 1133 1132',
11910 'STATE 4 d 100 1134',
11911 'STATE 2 d 42 1135',
11912 'STATE 6 t 1137 1136',
11913 'STATE 6 y 42 1138',
11914 'STATE 3 h 1140 1139',
11915 'STATE 4 b 42 68',
11916 'STATE 2 # 1142 1141',
11917 'STATE 1 0 42 1143',
11918 'STATE 1 c 68 42',
11919 'STATE 4 d 42 1144',
11920 'STATE 1 # 42 68',
11921 'STATE 4 l 1146 1145',
11922 'STATE 2 s 42 1147',
11923 'STATE 3 g 1148 42',
11924 'STATE 3 g 42 1149',
11925 'STATE 6 l 68 1150',
11926 'STATE 2 t 42 1151',
11927 'STATE 4 l 68 28',
11928 'STATE 5 r 82 1152',
11929 'STATE 6 i 82 1153',
11930 'STATE 6 l 82 1154',
11931 'STATE 4 m 1156 1155',
11932 'STATE 2 r 1157 68',
11933 'STATE 2 c 1159 1158',
11934 'STATE 3 l 68 1160',
11935 'STATE 2 t 68 1161',
11936 'STATE 2 a 68 1162',
11937 'STATE 2 r 68 28',
11938 'STATE 3 s 28 1163',
11939 'STATE 6 # 1165 1164',
11940 'STATE 6 # 1166 28',
11941 'STATE 3 h 1168 1167',
11942 'STATE 1 e 28 1169',
11943 'STATE 5 # 28 1170',
11944 'STATE 3 i 28 1171',
11945 'STATE 1 s 29 1172',
11946 'STATE 1 m 29 1173',
11947 'STATE 1 a 28 26',
11948 'STATE 3 t 28 1174',
11949 'STATE 5 q 1176 1175',
11950 'STATE 5 t 1178 1177',
11951 'STATE 3 f 29 1179',
11952 'STATE 6 i 29 1180',
11953 'STATE 6 c 28 1181',
11954 'STATE 2 # 1182 100',
11955 'STATE 3 k 26 1183',
11956 'STATE 3 c 1185 1184',
11957 'STATE 5 y 126 28',
11958 'STATE 4 w 1187 1186',
11959 'STATE 3 w 1189 1188',
11960 'STATE 6 k 29 68',
11961 'STATE 3 b 711 1190',
11962 'STATE 3 l 100 42',
11963 'STATE 6 s 1192 1191',
11964 'STATE 6 e 1194 1193',
11965 'STATE 5 k 100 1195',
11966 'STATE 2 u 29 1196',
11967 'STATE 6 i 42 1197',
11968 'STATE 3 r 1198 42',
11969 'STATE 5 r 1200 1199',
11970 'STATE 5 a 1202 1201',
11971 'STATE 5 n 1204 1203',
11972 'STATE 6 o 100 1205',
11973 'STATE 5 u 68 1206',
11974 'STATE 6 o 29 230',
11975 'STATE 6 r 82 29',
11976 'STATE 6 o 100 1207',
11977 'STATE 4 o 28 1208',
11978 'STATE 1 a 133 42',
11979 'STATE 2 n 29 1209',
11980 'STATE 2 s 1211 1210',
11981 'STATE 3 c 82 1212',
11982 'STATE 3 h 1214 1213',
11983 'STATE 1 b 42 1215',
11984 'STATE 6 r 1217 1216',
11985 'STATE 4 l 230 68',
11986 'STATE 4 m 68 1218',
11987 'STATE 4 n 29 68',
11988 'STATE 2 a 68 937',
11989 'STATE 1 n 42 1219',
11990 'STATE 1 g 72 42',
11991 'STATE 3 c 42 1220',
11992 'STATE 2 a 1222 1221',
11993 'STATE 5 g 100 1223',
11994 'STATE 2 s 42 28',
11995 'STATE 2 g 1225 1224',
11996 'STATE 4 g 68 1226',
11997 'STATE 4 m 68 100',
11998 'STATE 3 h 100 1227',
11999 'STATE 5 k 100 1228',
12000 'STATE 6 a 100 1229',
12001 'STATE 3 h 100 1230',
12002 'STATE 5 l 1231 29',
12003 'STATE 5 p 100 1232',
12004 'STATE 3 o 28 1233',
12005 'STATE 5 g 1235 1234',
12006 'STATE 6 e 29 1236',
12007 'STATE 5 r 28 29',
12008 'STATE 5 n 28 1237',
12009 'STATE 6 n 1239 1238',
12010 'STATE 4 b 562 1240',
12011 'STATE 3 l 68 29',
12012 'STATE 3 j 68 562',
12013 'STATE 4 b 1242 1241',
12014 'STATE 4 n 1244 1243',
12015 'STATE 3 d 42 1245',
12016 'STATE 4 t 68 29',
12017 'STATE 4 h 68 1246',
12018 'STATE 6 # 82 1247',
12019 'STATE 5 t 82 1248',
12020 'STATE 6 o 29 1249',
12021 'STATE 6 o 1251 1250',
12022 'STATE 6 e 230 1252',
12023 'STATE 6 g 100 1253',
12024 'STATE 6 y 68 1254',
12025 'STATE 5 m 82 1255',
12026 'STATE 1 # 1257 1256',
12027 'STATE 6 k 608 1258',
12028 'STATE 4 o 28 1259',
12029 'STATE 3 b 68 1260',
12030 'STATE 4 n 100 1261',
12031 'STATE 3 v 230 68',
12032 'STATE 2 # 1262 100',
12033 'STATE 2 # 230 42',
12034 'STATE 3 l 42 1263',
12035 'STATE 3 t 42 68',
12036 'STATE 2 g 1265 1264',
12037 'STATE 1 # 29 1266',
12038 'STATE 2 # 1268 1267',
12039 'STATE 3 t 29 1269',
12040 'STATE 4 s 29 42',
12041 'STATE 5 c 42 1270',
12042 'STATE 3 d 42 1271',
12043 'STATE 6 o 1273 1272',
12044 'STATE 4 b 1275 1274',
12045 'STATE 4 t 1277 1276',
12046 'STATE 2 p 230 1278',
12047 'STATE 2 g 42 1279',
12048 'STATE 4 v 1280 100',
12049 'STATE 3 h 42 1281',
12050 'STATE 2 f 42 1282',
12051 'STATE 6 i 68 1283',
12052 'STATE 4 n 68 1284',
12053 'STATE 4 t 68 1285',
12054 'STATE 4 n 1287 1286',
12055 'STATE 4 z 42 100',
12056 'STATE 4 k 42 1288',
12057 'STATE 3 t 100 42',
12058 'STATE 3 l 42 271',
12059 'STATE 4 y 42 1289',
12060 'STATE 3 g 42 1290',
12061 'STATE 1 e 42 1291',
12062 'STATE 3 f 42 1096',
12063 'STATE 2 n 72 42',
12064 'STATE 3 c 42 68',
12065 'STATE 1 i 247 1292',
12066 'STATE 1 o 247 331',
12067 'STATE 2 a 29 82',
12068 'STATE 3 f 1294 1293',
12069 'STATE 6 s 82 1295',
12070 'STATE 4 a 28 1296',
12071 'STATE 2 g 100 1297',
12072 'STATE 1 a 68 29',
12073 'STATE 3 y 562 1298',
12074 'STATE 3 h 68 562',
12075 'STATE 3 n 68 1299',
12076 'STATE 2 o 230 1300',
12077 'STATE 2 i 29 1301',
12078 'STATE 2 s 42 72',
12079 'STATE 5 # 1303 1302',
12080 'STATE 3 y 29 1304',
12081 'STATE 2 i 230 29',
12082 'STATE 1 d 28 1305',
12083 'STATE 1 s 100 28',
12084 'STATE 6 # 28 1306',
12085 'STATE 1 h 28 1307',
12086 'STATE 2 a 1308 29',
12087 'STATE 2 e 230 1309',
12088 'STATE 3 u 230 1310',
12089 'STATE 1 e 26 28',
12090 'STATE 6 i 1312 1311',
12091 'STATE 3 m 29 230',
12092 'STATE 5 d 1314 1313',
12093 'STATE 3 m 230 1315',
12094 'STATE 5 t 230 1316',
12095 'STATE 6 h 29 400',
12096 'STATE 6 m 28 1317',
12097 'STATE 6 n 1319 1318',
12098 'STATE 6 l 230 1320',
12099 'STATE 3 f 29 1321',
12100 'STATE 6 a 230 100',
12101 'STATE 5 t 1323 1322',
12102 'STATE 6 k 29 82',
12103 'STATE 6 # 1325 1324',
12104 'STATE 5 k 1327 1326',
12105 'STATE 6 y 68 1328',
12106 'STATE 3 w 1330 1329',
12107 'STATE 5 t 68 1331',
12108 'STATE 6 y 68 1332',
12109 'STATE 2 f 230 1333',
12110 'STATE 5 d 1335 1334',
12111 'STATE 1 t 29 1336',
12112 'STATE 6 l 100 1337',
12113 'STATE 1 a 42 1338',
12114 'STATE 4 w 1340 1339',
12115 'STATE 6 o 100 1341',
12116 'STATE 5 u 68 1342',
12117 'STATE 6 n 68 1343',
12118 'STATE 6 l 100 1344',
12119 'STATE 6 o 68 100',
12120 'STATE 6 a 562 100',
12121 'STATE 5 p 100 1345',
12122 'STATE 6 i 29 100',
12123 'STATE 4 g 1347 1346',
12124 'STATE 3 d 29 230',
12125 'STATE 3 w 82 1348',
12126 'STATE 1 n 82 1349',
12127 'STATE 2 e 1351 1350',
12128 'STATE 4 v 1353 1352',
12129 'STATE 2 s 100 1354',
12130 'STATE 1 o 100 68',
12131 'STATE 6 u 68 1355',
12132 'STATE 4 m 100 1226',
12133 'STATE 6 g 68 1356',
12134 'STATE 3 i 42 1357',
12135 'STATE 3 t 42 1358',
12136 'STATE 3 u 1360 1359',
12137 'STATE 3 v 29 1361',
12138 'STATE 5 k 82 29',
12139 'STATE 4 n 1363 1362',
12140 'STATE 6 a 68 1364',
12141 'STATE 4 n 100 68',
12142 'STATE 3 r 100 29',
12143 'STATE 5 t 100 1365',
12144 'STATE 6 m 562 1366',
12145 'STATE 6 e 29 1367',
12146 'STATE 3 h 100 29',
12147 'STATE 5 l 100 82',
12148 'STATE 4 o 1369 1368',
12149 'STATE 3 v 1371 1370',
12150 'STATE 6 e 1373 1372',
12151 'STATE 5 l 29 1374',
12152 'STATE 5 t 28 1375',
12153 'STATE 4 k 68 1376',
12154 'STATE 4 x 100 1377',
12155 'STATE 4 h 29 68',
12156 'STATE 3 l 230 1378',
12157 'STATE 3 l 42 100',
12158 'STATE 4 k 1380 1379',
12159 'STATE 3 m 100 1381',
12160 'STATE 3 f 42 1382',
12161 'STATE 4 p 68 1383',
12162 'STATE 5 u 1385 1384',
12163 'STATE 5 k 82 1386',
12164 'STATE 3 s 1388 1387',
12165 'STATE 6 e 1389 82',
12166 'STATE 3 b 230 29',
12167 'STATE 6 o 100 1390',
12168 'STATE 6 r 100 1391',
12169 'STATE 3 c 68 1392',
12170 'STATE 5 r 29 1393',
12171 'STATE 6 s 1395 1394',
12172 'STATE 2 q 29 1396',
12173 'STATE 6 m 1398 1397',
12174 'STATE 4 n 100 1399',
12175 'STATE 4 l 1401 1400',
12176 'STATE 4 l 1403 1402',
12177 'STATE 4 t 42 1404',
12178 'STATE 3 n 42 68',
12179 'STATE 4 l 1405 42',
12180 'STATE 4 c 42 100',
12181 'STATE 1 o 42 100',
12182 'STATE 4 m 1407 1406',
12183 'STATE 3 m 1409 1408',
12184 'STATE 3 x 100 1410',
12185 'STATE 1 t 42 1411',
12186 'STATE 3 r 42 1412',
12187 'STATE 4 m 1414 1413',
12188 'STATE 2 n 100 42',
12189 'STATE 6 l 230 1415',
12190 'STATE 6 r 100 1416',
12191 'STATE 3 i 68 1417',
12192 'STATE 6 a 562 1418',
12193 'STATE 4 m 68 42',
12194 'STATE 2 t 42 1419',
12195 'STATE 2 t 100 42',
12196 'STATE 6 n 100 42',
12197 'STATE 4 t 42 1420',
12198 'STATE 6 y 1422 1421',
12199 'STATE 4 m 100 1423',
12200 'STATE 4 n 68 100',
12201 'STATE 3 m 1425 1424',
12202 'STATE 3 p 100 68',
12203 'STATE 4 d 42 1426',
12204 'STATE 1 r 68 42',
12205 'STATE 4 k 42 1427',
12206 'STATE 3 g 29 1428',
12207 'STATE 3 l 29 1429',
12208 'STATE 6 h 82 1430',
12209 'STATE 5 s 82 63',
12210 'STATE 3 p 82 63',
12211 'STATE 4 z 230 1431',
12212 'STATE 3 h 671 1432',
12213 'STATE 1 t 230 1433',
12214 'STATE 3 y 68 1434',
12215 'STATE 2 g 68 1435',
12216 'STATE 2 e 68 1436',
12217 'STATE 6 s 1438 1437',
12218 'STATE 3 g 28 1439',
12219 'STATE 3 c 29 1440',
12220 'STATE 1 m 29 1441',
12221 'STATE 5 # 28 29',
12222 'STATE 2 l 28 1442',
12223 'STATE 5 # 29 28',
12224 'STATE 1 t 29 1443',
12225 'STATE 1 a 28 1444',
12226 'STATE 6 e 1445 29',
12227 'STATE 5 t 29 1446',
12228 'STATE 3 k 29 1447',
12229 'STATE 3 c 230 29',
12230 'STATE 3 c 230 1251',
12231 'STATE 3 k 29 1448',
12232 'STATE 3 b 1450 1449',
12233 'STATE 3 p 28 1451',
12234 'STATE 3 m 28 26',
12235 'STATE 3 h 28 1452',
12236 'STATE 3 b 1453 29',
12237 'STATE 3 b 1455 1454',
12238 'STATE 4 t 1457 1456',
12239 'STATE 5 d 1459 1458',
12240 'STATE 5 d 68 1460',
12241 'STATE 5 d 1461 68',
12242 'STATE 6 # 29 82',
12243 'STATE 1 r 68 1462',
12244 'STATE 5 a 1464 1463',
12245 'STATE 5 d 29 82',
12246 'STATE 5 d 1466 1465',
12247 'STATE 6 i 1468 1467',
12248 'STATE 3 h 100 1469',
12249 'STATE 3 m 68 1470',
12250 'STATE 3 l 1472 1471',
12251 'STATE 3 t 100 1473',
12252 'STATE 6 u 100 1474',
12253 'STATE 2 t 42 72',
12254 'STATE 5 a 1476 1475',
12255 'STATE 5 a 68 29',
12256 'STATE 6 i 1478 1477',
12257 'STATE 6 r 100 1479',
12258 'STATE 6 z 100 1480',
12259 'STATE 5 g 1482 1481',
12260 'STATE 6 i 1484 1483',
12261 'STATE 4 c 68 1485',
12262 'STATE 3 t 562 1486',
12263 'STATE 3 c 82 1487',
12264 'STATE 1 y 68 29',
12265 'STATE 3 d 68 1488',
12266 'STATE 3 r 82 1489',
12267 'STATE 3 r 1491 1490',
12268 'STATE 6 r 42 230',
12269 'STATE 2 c 28 68',
12270 'STATE 6 l 1493 1492',
12271 'STATE 6 m 68 1070',
12272 'STATE 2 o 1495 1494',
12273 'STATE 1 t 1496 42',
12274 'STATE 2 u 1498 1497',
12275 'STATE 6 r 230 1499',
12276 'STATE 5 o 331 1500',
12277 'STATE 2 v 68 1501',
12278 'STATE 5 c 230 29',
12279 'STATE 4 c 68 1502',
12280 'STATE 6 e 42 100',
12281 'STATE 6 p 562 1503',
12282 'STATE 6 a 100 1504',
12283 'STATE 6 e 1506 1505',
12284 'STATE 6 i 1507 230',
12285 'STATE 3 i 68 1508',
12286 'STATE 5 d 100 1509',
12287 'STATE 6 i 1511 1510',
12288 'STATE 3 t 100 1512',
12289 'STATE 5 r 29 1513',
12290 'STATE 3 b 28 1514',
12291 'STATE 3 c 1516 1515',
12292 'STATE 3 l 1518 1517',
12293 'STATE 4 p 230 1519',
12294 'STATE 6 l 1521 1520',
12295 'STATE 3 n 230 1522',
12296 'STATE 3 c 68 1523',
12297 'STATE 3 c 100 1524',
12298 'STATE 3 b 42 1525',
12299 'STATE 3 m 1527 1526',
12300 'STATE 3 v 562 1528',
12301 'STATE 3 b 1530 1529',
12302 'STATE 6 e 100 1531',
12303 'STATE 6 a 100 1532',
12304 'STATE 3 b 230 82',
12305 'STATE 6 i 82 100',
12306 'STATE 3 m 100 1533',
12307 'STATE 3 k 100 1534',
12308 'STATE 4 h 29 1535',
12309 'STATE 4 b 1537 1536',
12310 'STATE 4 l 68 1538',
12311 'STATE 3 t 1540 1539',
12312 'STATE 6 f 100 1541',
12313 'STATE 3 m 100 1542',
12314 'STATE 4 l 100 1543',
12315 'STATE 4 c 100 1544',
12316 'STATE 1 0 68 1545',
12317 'STATE 3 r 100 1546',
12318 'STATE 1 0 68 100',
12319 'STATE 4 m 42 1547',
12320 'STATE 2 a 29 42',
12321 'STATE 3 r 1549 1548',
12322 'STATE 1 o 100 1550',
12323 'STATE 3 j 68 1551',
12324 'STATE 4 c 100 1552',
12325 'STATE 2 c 1554 1553',
12326 'STATE 6 h 42 1555',
12327 'STATE 6 e 28 42',
12328 'STATE 6 r 1557 1556',
12329 'STATE 6 n 68 1558',
12330 'STATE 6 x 68 1559',
12331 'STATE 6 l 100 68',
12332 'STATE 6 t 100 1560',
12333 'STATE 2 a 68 29',
12334 'STATE 2 c 42 1561',
12335 'STATE 4 m 42 1562',
12336 'STATE 4 p 42 1563',
12337 'STATE 3 r 100 42',
12338 'STATE 4 c 100 68',
12339 'STATE 3 p 68 1564',
12340 'STATE 4 d 100 68',
12341 'STATE 1 # 42 1565',
12342 'STATE 3 c 42 1566',
12343 'STATE 3 v 42 1567',
12344 'STATE 1 d 68 1568',
12345 'STATE 5 t 1570 1569',
12346 'STATE 4 x 1572 1571',
12347 'STATE 3 r 100 1573',
12348 'STATE 1 b 68 1574',
12349 'STATE 3 a 29 1575',
12350 'STATE 2 a 1576 68',
12351 'STATE 3 y 68 100',
12352 'STATE 6 z 28 1577',
12353 'STATE 3 y 29 1578',
12354 'STATE 2 s 1580 1579',
12355 'STATE 5 z 230 1581',
12356 'STATE 3 c 28 1582',
12357 'STATE 5 d 29 1583',
12358 'STATE 1 c 29 1584',
12359 'STATE 3 p 26 1585',
12360 'STATE 5 m 1587 1586',
12361 'STATE 5 p 230 1588',
12362 'STATE 3 g 29 1589',
12363 'STATE 3 p 29 1590',
12364 'STATE 3 c 28 26',
12365 'STATE 6 n 100 28',
12366 'STATE 6 o 230 26',
12367 'STATE 3 m 28 1591',
12368 'STATE 6 a 100 29',
12369 'STATE 4 e 1593 1592',
12370 'STATE 5 h 1595 1594',
12371 'STATE 2 a 1597 1596',
12372 'STATE 6 # 68 1598',
12373 'STATE 5 y 68 1599',
12374 'STATE 2 e 68 1600',
12375 'STATE 5 t 82 1601',
12376 'STATE 1 e 1603 1602',
12377 'STATE 2 d 82 1604',
12378 'STATE 5 s 1606 1605',
12379 'STATE 3 m 100 1607',
12380 'STATE 3 b 100 1608',
12381 'STATE 1 r 100 1609',
12382 'STATE 2 r 29 1610',
12383 'STATE 1 f 100 68',
12384 'STATE 1 f 100 1611',
12385 'STATE 5 y 1613 1612',
12386 'STATE 3 h 100 1614',
12387 'STATE 2 l 68 1615',
12388 'STATE 3 i 100 1616',
12389 'STATE 6 o 100 29',
12390 'STATE 5 u 1618 1617',
12391 'STATE 6 l 230 1619',
12392 'STATE 6 e 1621 1620',
12393 'STATE 4 d 230 100',
12394 'STATE 5 m 100 1622',
12395 'STATE 6 l 68 1623',
12396 'STATE 6 r 100 1624',
12397 'STATE 6 e 100 1625',
12398 'STATE 5 k 100 1626',
12399 'STATE 5 b 230 1627',
12400 'STATE 4 d 100 1628',
12401 'STATE 6 i 29 68',
12402 'STATE 1 p 68 1629',
12403 'STATE 2 o 68 1630',
12404 'STATE 3 w 68 82',
12405 'STATE 4 n 1631 68',
12406 'STATE 2 t 68 1632',
12407 'STATE 4 v 100 1633',
12408 'STATE 4 p 68 100',
12409 'STATE 3 r 1634 1120',
12410 'STATE 3 r 68 1289',
12411 'STATE 3 g 42 68',
12412 'STATE 5 a 1636 1635',
12413 'STATE 3 n 68 100',
12414 'STATE 4 d 29 1637',
12415 'STATE 6 o 100 1638',
12416 'STATE 4 s 100 1101',
12417 'STATE 5 n 68 29',
12418 'STATE 6 f 562 1639',
12419 'STATE 6 s 29 1640',
12420 'STATE 5 y 1642 1641',
12421 'STATE 5 l 1644 1643',
12422 'STATE 5 l 230 72',
12423 'STATE 5 t 1646 1645',
12424 'STATE 6 l 100 1647',
12425 'STATE 6 a 1511 100',
12426 'STATE 3 m 230 100',
12427 'STATE 3 l 42 1648',
12428 'STATE 6 i 29 1649',
12429 'STATE 6 e 28 1650',
12430 'STATE 3 i 29 1651',
12431 'STATE 4 n 68 1493',
12432 'STATE 4 n 100 1652',
12433 'STATE 4 m 230 1653',
12434 'STATE 3 c 68 529',
12435 'STATE 6 r 1655 1654',
12436 'STATE 3 m 100 1656',
12437 'STATE 6 r 68 230',
12438 'STATE 3 f 68 1657',
12439 'STATE 3 n 230 1511',
12440 'STATE 3 l 230 1658',
12441 'STATE 5 t 1660 1659',
12442 'STATE 6 i 100 1661',
12443 'STATE 6 t 68 100',
12444 'STATE 5 l 1663 1662',
12445 'STATE 5 l 100 42',
12446 'STATE 3 g 100 1185',
12447 'STATE 6 i 100 230',
12448 'STATE 6 n 68 100',
12449 'STATE 6 d 100 1664',
12450 'STATE 5 l 29 1665',
12451 'STATE 2 q 29 1666',
12452 'STATE 2 s 42 68',
12453 'STATE 3 s 100 1667',
12454 'STATE 6 k 29 1668',
12455 'STATE 4 b 42 1669',
12456 'STATE 3 w 230 1670',
12457 'STATE 2 # 230 100',
12458 'STATE 3 n 29 1671',
12459 'STATE 2 a 68 1672',
12460 'STATE 2 c 68 100',
12461 'STATE 1 d 100 1673',
12462 'STATE 3 m 100 1674',
12463 'STATE 2 o 1676 1675',
12464 'STATE 2 g 42 1677',
12465 'STATE 1 e 100 68',
12466 'STATE 4 n 42 1678',
12467 'STATE 4 l 100 230',
12468 'STATE 2 g 68 1679',
12469 'STATE 4 v 42 100',
12470 'STATE 2 c 42 1680',
12471 'STATE 2 s 42 1681',
12472 'STATE 4 t 273 1682',
12473 'STATE 6 r 68 1683',
12474 'STATE 4 v 1685 1684',
12475 'STATE 3 n 100 1686',
12476 'STATE 4 d 68 1687',
12477 'STATE 2 t 1688 42',
12478 'STATE 3 h 1690 1689',
12479 'STATE 3 c 68 1691',
12480 'STATE 1 e 42 1692',
12481 'STATE 2 o 42 1693',
12482 'STATE 2 e 42 1694',
12483 'STATE 3 d 247 1695',
12484 'STATE 3 t 63 1696',
12485 'STATE 6 z 82 63',
12486 'STATE 4 v 230 1697',
12487 'STATE 3 n 562 1698',
12488 'STATE 2 t 68 1699',
12489 'STATE 2 r 68 1700',
12490 'STATE 3 u 230 1701',
12491 'STATE 1 r 562 68',
12492 'STATE 2 a 1703 1702',
12493 'STATE 3 z 28 1704',
12494 'STATE 3 a 29 1705',
12495 'STATE 3 s 28 29',
12496 'STATE 3 a 29 1706',
12497 'STATE 2 a 28 230',
12498 'STATE 1 m 28 29',
12499 'STATE 3 t 29 1707',
12500 'STATE 2 s 26 1708',
12501 'STATE 3 f 29 1709',
12502 'STATE 3 p 29 1710',
12503 'STATE 3 s 29 1711',
12504 'STATE 3 t 29 1712',
12505 'STATE 5 l 29 1713',
12506 'STATE 6 n 28 1714',
12507 'STATE 2 a 1716 1715',
12508 'STATE 6 # 42 28',
12509 'STATE 5 k 100 1717',
12510 'STATE 4 c 1719 1718',
12511 'STATE 4 c 1721 1720',
12512 'STATE 1 h 68 100',
12513 'STATE 2 a 29 1722',
12514 'STATE 5 t 68 1723',
12515 'STATE 3 n 29 1724',
12516 'STATE 5 k 82 100',
12517 'STATE 2 e 154 68',
12518 'STATE 2 n 82 154',
12519 'STATE 2 a 1726 1725',
12520 'STATE 6 l 1728 1727',
12521 'STATE 6 k 100 1729',
12522 'STATE 6 r 230 1730',
12523 'STATE 5 n 68 1731',
12524 'STATE 2 s 100 1732',
12525 'STATE 3 i 29 1733',
12526 'STATE 2 d 1735 1734',
12527 'STATE 3 i 68 1736',
12528 'STATE 2 l 42 68',
12529 'STATE 3 r 1738 1737',
12530 'STATE 1 g 68 1739',
12531 'STATE 1 i 29 100',
12532 'STATE 5 h 1741 1740',
12533 'STATE 4 b 68 1742',
12534 'STATE 4 g 100 1743',
12535 'STATE 6 a 68 1744',
12536 'STATE 4 g 68 29',
12537 'STATE 5 b 1745 100',
12538 'STATE 6 s 68 1746',
12539 'STATE 5 a 100 1747',
12540 'STATE 6 o 562 100',
12541 'STATE 6 e 1749 1748',
12542 'STATE 5 v 230 100',
12543 'STATE 4 t 100 1750',
12544 'STATE 6 o 1752 1751',
12545 'STATE 2 r 68 1753',
12546 'STATE 6 v 100 1754',
12547 'STATE 6 n 68 29',
12548 'STATE 4 d 68 1755',
12549 'STATE 2 e 42 68',
12550 'STATE 5 o 1757 1756',
12551 'STATE 6 # 608 1758',
12552 'STATE 5 t 29 1759',
12553 'STATE 4 p 100 1760',
12554 'STATE 6 g 562 1761',
12555 'STATE 6 i 100 68',
12556 'STATE 5 u 1763 1762',
12557 'STATE 6 # 42 1764',
12558 'STATE 3 c 1766 1765',
12559 'STATE 4 c 68 1767',
12560 'STATE 5 u 1769 1768',
12561 'STATE 3 s 1770 100',
12562 'STATE 6 i 100 1771',
12563 'STATE 3 d 42 625',
12564 'STATE 5 u 100 1772',
12565 'STATE 3 k 28 1773',
12566 'STATE 3 z 68 1774',
12567 'STATE 4 g 230 1775',
12568 'STATE 4 f 100 230',
12569 'STATE 3 c 1777 1776',
12570 'STATE 4 d 42 1778',
12571 'STATE 4 m 68 1779',
12572 'STATE 3 p 100 1780',
12573 'STATE 4 t 42 1781',
12574 'STATE 5 k 1783 1782',
12575 'STATE 3 s 82 1784',
12576 'STATE 6 r 562 1785',
12577 'STATE 3 f 82 1786',
12578 'STATE 3 c 82 1787',
12579 'STATE 6 m 100 1788',
12580 'STATE 5 d 29 1789',
12581 'STATE 6 m 1791 1790',
12582 'STATE 4 k 29 1792',
12583 'STATE 6 l 1794 1793',
12584 'STATE 4 t 68 100',
12585 'STATE 3 d 1796 1795',
12586 'STATE 4 t 100 1797',
12587 'STATE 3 h 100 1798',
12588 'STATE 1 0 100 1799',
12589 'STATE 4 p 42 100',
12590 'STATE 4 d 512 1800',
12591 'STATE 3 m 230 68',
12592 'STATE 1 p 42 1801',
12593 'STATE 3 r 1803 1802',
12594 'STATE 2 h 68 1804',
12595 'STATE 5 g 1806 1805',
12596 'STATE 6 k 1808 1807',
12597 'STATE 4 p 42 1809',
12598 'STATE 2 a 68 1810',
12599 'STATE 6 t 68 1811',
12600 'STATE 6 n 230 100',
12601 'STATE 3 c 68 1812',
12602 'STATE 2 d 68 1813',
12603 'STATE 4 v 100 42',
12604 'STATE 6 e 100 1814',
12605 'STATE 4 b 100 1815',
12606 'STATE 3 g 68 1816',
12607 'STATE 4 m 42 1817',
12608 'STATE 1 o 42 1818',
12609 'STATE 3 c 42 29',
12610 'STATE 2 a 247 1819',
12611 'STATE 3 h 773 1820',
12612 'STATE 3 a 29 1821',
12613 'STATE 3 r 562 100',
12614 'STATE 3 d 68 1822',
12615 'STATE 2 s 68 1823',
12616 'STATE 2 t 1825 1824',
12617 'STATE 6 l 28 1826',
12618 'STATE 6 a 29 1827',
12619 'STATE 1 r 29 28',
12620 'STATE 3 n 1829 1828',
12621 'STATE 5 d 1831 1830',
12622 'STATE 2 l 29 1832',
12623 'STATE 2 e 28 1833',
12624 'STATE 3 l 29 1834',
12625 'STATE 2 # 1314 230',
12626 'STATE 3 d 29 1835',
12627 'STATE 3 p 29 1836',
12628 'STATE 3 v 230 1837',
12629 'STATE 3 g 28 1838',
12630 'STATE 5 y 1840 1839',
12631 'STATE 4 o 28 1841',
12632 'STATE 4 b 29 1842',
12633 'STATE 6 # 68 29',
12634 'STATE 1 e 1844 1843',
12635 'STATE 6 e 100 1845',
12636 'STATE 2 m 1846 100',
12637 'STATE 6 a 29 100',
12638 'STATE 5 v 29 1847',
12639 'STATE 6 i 29 1059',
12640 'STATE 2 i 1849 1848',
12641 'STATE 6 n 1851 1850',
12642 'STATE 2 c 1853 1852',
12643 'STATE 5 t 1854 100',
12644 'STATE 2 x 100 1855',
12645 'STATE 6 n 100 1856',
12646 'STATE 1 a 100 29',
12647 'STATE 1 e 100 1857',
12648 'STATE 1 n 100 1858',
12649 'STATE 1 n 68 1859',
12650 'STATE 3 v 100 68',
12651 'STATE 5 t 1861 1860',
12652 'STATE 3 i 68 1862',
12653 'STATE 1 e 562 1863',
12654 'STATE 1 c 68 1864',
12655 'STATE 4 s 1866 1865',
12656 'STATE 4 s 100 1867',
12657 'STATE 6 l 68 1868',
12658 'STATE 6 i 68 1869',
12659 'STATE 6 u 230 68',
12660 'STATE 6 i 562 1205',
12661 'STATE 6 r 100 1870',
12662 'STATE 5 c 1871 100',
12663 'STATE 6 a 1873 1872',
12664 'STATE 5 v 230 1874',
12665 'STATE 4 p 68 1875',
12666 'STATE 6 u 68 1876',
12667 'STATE 2 e 29 1877',
12668 'STATE 3 h 1879 1878',
12669 'STATE 1 r 230 68',
12670 'STATE 4 b 68 1880',
12671 'STATE 3 a 29 1881',
12672 'STATE 6 # 29 1882',
12673 'STATE 4 h 28 1883',
12674 'STATE 2 q 100 1884',
12675 'STATE 4 c 100 1885',
12676 'STATE 6 i 562 100',
12677 'STATE 6 a 1887 1886',
12678 'STATE 6 # 29 1888',
12679 'STATE 4 t 29 1889',
12680 'STATE 5 u 1891 1890',
12681 'STATE 5 t 230 1892',
12682 'STATE 4 b 42 1893',
12683 'STATE 5 y 100 1894',
12684 'STATE 6 s 42 1895',
12685 'STATE 6 o 230 1185',
12686 'STATE 5 n 562 1896',
12687 'STATE 3 m 100 1897',
12688 'STATE 6 # 28 42',
12689 'STATE 6 b 100 1898',
12690 'STATE 4 t 68 1899',
12691 'STATE 4 j 68 1900',
12692 'STATE 4 p 68 1901',
12693 'STATE 3 c 230 1902',
12694 'STATE 3 c 1904 1903',
12695 'STATE 3 h 100 1905',
12696 'STATE 3 c 42 1906',
12697 'STATE 5 l 1908 1907',
12698 'STATE 6 o 100 1909',
12699 'STATE 6 o 29 1910',
12700 'STATE 6 u 562 100',
12701 'STATE 3 s 42 100',
12702 'STATE 3 v 100 1911',
12703 'STATE 3 m 68 1685',
12704 'STATE 5 a 29 1912',
12705 'STATE 6 l 1914 1913',
12706 'STATE 2 a 68 28',
12707 'STATE 2 r 68 1915',
12708 'STATE 2 d 68 1916',
12709 'STATE 3 r 1917 68',
12710 'STATE 3 t 100 1918',
12711 'STATE 6 d 42 68',
12712 'STATE 3 l 100 1554',
12713 'STATE 2 o 230 1919',
12714 'STATE 4 v 100 29',
12715 'STATE 4 l 68 1920',
12716 'STATE 4 f 230 1921',
12717 'STATE 3 k 1923 1922',
12718 'STATE 4 b 68 42',
12719 'STATE 3 r 42 1924',
12720 'STATE 6 e 42 1925',
12721 'STATE 3 d 42 28',
12722 'STATE 6 l 1927 1926',
12723 'STATE 4 c 68 1928',
12724 'STATE 2 a 68 1929',
12725 'STATE 3 h 68 100',
12726 'STATE 4 l 68 1930',
12727 'STATE 4 b 68 1931',
12728 'STATE 2 b 100 29',
12729 'STATE 4 c 1047 1932',
12730 'STATE 6 r 100 1281',
12731 'STATE 3 r 100 1933',
12732 'STATE 4 s 68 42',
12733 'STATE 2 p 42 1934',
12734 'STATE 1 r 247 1935',
12735 'STATE 3 b 63 1936',
12736 'STATE 3 c 100 1937',
12737 'STATE 2 l 68 1938',
12738 'STATE 3 l 68 1939',
12739 'STATE 3 p 100 1940',
12740 'STATE 3 r 100 68',
12741 'STATE 6 t 1942 1941',
12742 'STATE 6 i 28 29',
12743 'STATE 2 l 1944 1943',
12744 'STATE 1 o 29 28',
12745 'STATE 5 s 28 29',
12746 'STATE 3 i 28 1945',
12747 'STATE 6 e 29 1946',
12748 'STATE 3 h 28 1947',
12749 'STATE 3 t 29 1948',
12750 'STATE 3 j 29 1949',
12751 'STATE 2 # 1950 29',
12752 'STATE 3 c 29 1951',
12753 'STATE 3 l 100 230',
12754 'STATE 3 w 1953 1952',
12755 'STATE 4 c 68 1954',
12756 'STATE 6 i 1956 1955',
12757 'STATE 4 g 100 1957',
12758 'STATE 2 r 230 1958',
12759 'STATE 2 n 230 1959',
12760 'STATE 6 a 1961 1960',
12761 'STATE 6 # 562 100',
12762 'STATE 1 d 100 1962',
12763 'STATE 6 g 100 1963',
12764 'STATE 3 y 230 68',
12765 'STATE 6 k 230 1964',
12766 'STATE 3 t 230 68',
12767 'STATE 1 r 100 1965',
12768 'STATE 1 r 68 100',
12769 'STATE 1 i 100 68',
12770 'STATE 3 m 68 1966',
12771 'STATE 6 h 100 68',
12772 'STATE 1 o 100 1967',
12773 'STATE 3 r 29 1968',
12774 'STATE 1 r 68 1969',
12775 'STATE 5 s 68 100',
12776 'STATE 2 p 100 1970',
12777 'STATE 2 e 100 1971',
12778 'STATE 1 s 68 1972',
12779 'STATE 2 o 68 1973',
12780 'STATE 6 r 1975 1974',
12781 'STATE 5 s 68 1976',
12782 'STATE 6 i 68 1977',
12783 'STATE 6 n 68 1978',
12784 'STATE 4 b 68 1979',
12785 'STATE 6 d 230 100',
12786 'STATE 6 h 100 1980',
12787 'STATE 5 g 562 100',
12788 'STATE 5 v 100 1981',
12789 'STATE 5 g 100 1982',
12790 'STATE 4 s 68 1983',
12791 'STATE 6 a 1985 1984',
12792 'STATE 1 0 100 1986',
12793 'STATE 3 g 68 1987',
12794 'STATE 2 s 68 1988',
12795 'STATE 4 m 68 1989',
12796 'STATE 5 y 1991 1990',
12797 'STATE 2 o 68 1992',
12798 'STATE 3 p 230 1993',
12799 'STATE 2 g 29 1994',
12800 'STATE 4 s 1996 1995',
12801 'STATE 5 r 1998 1997',
12802 'STATE 4 j 2000 1999',
12803 'STATE 3 m 2002 2001',
12804 'STATE 3 b 42 2003',
12805 'STATE 5 h 2005 2004',
12806 'STATE 4 g 42 100',
12807 'STATE 4 p 230 100',
12808 'STATE 3 l 42 1674',
12809 'STATE 3 h 100 2006',
12810 'STATE 6 e 230 100',
12811 'STATE 5 v 562 2007',
12812 'STATE 6 # 100 29',
12813 'STATE 4 n 2009 2008',
12814 'STATE 4 m 68 2010',
12815 'STATE 6 t 2012 2011',
12816 'STATE 4 s 1870 68',
12817 'STATE 3 h 100 2013',
12818 'STATE 4 b 230 2014',
12819 'STATE 4 v 100 230',
12820 'STATE 3 k 100 2015',
12821 'STATE 3 h 42 2016',
12822 'STATE 5 s 2018 2017',
12823 'STATE 6 a 100 2019',
12824 'STATE 3 t 82 2020',
12825 'STATE 6 h 100 2021',
12826 'STATE 3 g 100 2022',
12827 'STATE 4 f 29 2023',
12828 'STATE 2 a 68 2024',
12829 'STATE 3 f 100 68',
12830 'STATE 4 t 68 2025',
12831 'STATE 6 r 68 2026',
12832 'STATE 4 z 68 100',
12833 'STATE 4 s 2028 2027',
12834 'STATE 3 d 100 2029',
12835 'STATE 1 o 68 2030',
12836 'STATE 2 a 230 68',
12837 'STATE 4 s 42 2031',
12838 'STATE 4 l 68 100',
12839 'STATE 2 s 42 2032',
12840 'STATE 2 # 2034 2033',
12841 'STATE 4 d 68 2035',
12842 'STATE 4 n 2037 2036',
12843 'STATE 4 n 68 29',
12844 'STATE 3 s 42 2038',
12845 'STATE 4 c 68 2039',
12846 'STATE 2 c 68 2040',
12847 'STATE 4 x 100 2041',
12848 'STATE 3 s 68 2042',
12849 'STATE 3 s 42 2043',
12850 'STATE 1 a 2045 2044',
12851 'STATE 5 b 63 2046',
12852 'STATE 3 t 2048 2047',
12853 'STATE 3 n 68 2049',
12854 'STATE 1 p 68 2050',
12855 'STATE 3 b 68 2051',
12856 'STATE 2 c 29 2052',
12857 'STATE 3 h 2053 29',
12858 'STATE 2 h 28 2054',
12859 'STATE 1 a 230 28',
12860 'STATE 3 k 28 2055',
12861 'STATE 3 b 29 2056',
12862 'STATE 6 n 28 2057',
12863 'STATE 3 k 29 2058',
12864 'STATE 3 t 29 2059',
12865 'STATE 3 c 29 2060',
12866 'STATE 5 b 29 2061',
12867 'STATE 5 u 2063 2062',
12868 'STATE 2 o 68 2064',
12869 'STATE 6 # 2065 68',
12870 'STATE 4 s 2067 2066',
12871 'STATE 1 p 42 2068',
12872 'STATE 2 m 100 2069',
12873 'STATE 1 i 29 2070',
12874 'STATE 2 r 29 230',
12875 'STATE 3 c 100 2071',
12876 'STATE 1 d 68 100',
12877 'STATE 6 a 2073 2072',
12878 'STATE 4 f 230 2074',
12879 'STATE 3 k 230 2075',
12880 'STATE 5 d 2077 2076',
12881 'STATE 2 t 100 68',
12882 'STATE 3 l 68 100',
12883 'STATE 3 l 2078 100',
12884 'STATE 3 d 68 2079',
12885 'STATE 2 u 68 2080',
12886 'STATE 1 o 68 1986',
12887 'STATE 2 b 100 68',
12888 'STATE 1 s 100 1854',
12889 'STATE 4 h 29 2081',
12890 'STATE 4 g 68 2082',
12891 'STATE 5 y 42 2083',
12892 'STATE 4 c 100 2084',
12893 'STATE 4 c 68 2085',
12894 'STATE 6 t 100 2086',
12895 'STATE 6 e 100 230',
12896 'STATE 5 b 100 2087',
12897 'STATE 5 b 100 562',
12898 'STATE 4 f 68 1285',
12899 'STATE 6 e 2089 2088',
12900 'STATE 1 a 100 1403',
12901 'STATE 2 i 68 100',
12902 'STATE 3 w 82 2090',
12903 'STATE 2 c 68 82',
12904 'STATE 4 n 68 2091',
12905 'STATE 6 e 2093 2092',
12906 'STATE 6 # 42 100',
12907 'STATE 4 v 2095 2094',
12908 'STATE 3 m 68 2096',
12909 'STATE 6 # 29 230',
12910 'STATE 3 r 68 2097',
12911 'STATE 3 n 230 100',
12912 'STATE 3 m 2099 2098',
12913 'STATE 4 t 2101 2100',
12914 'STATE 3 m 2103 2102',
12915 'PHONE ay1',
12916 'STATE 4 k 68 2104',
12917 'STATE 4 t 68 1917',
12918 'STATE 4 d 42 100',
12919 'STATE 5 r 1786 2105',
12920 'STATE 3 f 29 2106',
12921 'STATE 6 o 2108 2107',
12922 'STATE 5 c 100 2109',
12923 'STATE 3 n 2028 2110',
12924 'STATE 3 j 68 100',
12925 'STATE 4 p 230 2111',
12926 'STATE 4 c 2113 2112',
12927 'STATE 4 b 29 1838',
12928 'STATE 4 h 29 2114',
12929 'STATE 4 s 68 230',
12930 'STATE 3 b 68 100',
12931 'STATE 3 m 68 2115',
12932 'STATE 5 z 2117 2116',
12933 'STATE 3 f 82 2020',
12934 'STATE 6 u 2119 2118',
12935 'STATE 3 b 82 100',
12936 'STATE 3 b 100 82',
12937 'STATE 3 t 82 100',
12938 'STATE 5 h 29 2120',
12939 'STATE 4 v 230 2121',
12940 'STATE 3 t 1285 2122',
12941 'STATE 2 s 230 100',
12942 'STATE 3 f 68 2123',
12943 'STATE 6 l 230 68',
12944 'STATE 2 # 2125 2124',
12945 'STATE 2 a 68 2126',
12946 'STATE 3 s 2128 2127',
12947 'STATE 2 b 42 2129',
12948 'STATE 1 # 42 2130',
12949 'STATE 6 l 42 2131',
12950 'STATE 6 m 42 2132',
12951 'STATE 2 n 68 2133',
12952 'STATE 2 m 100 230',
12953 'STATE 4 v 230 2134',
12954 'STATE 6 r 29 68',
12955 'STATE 2 a 2136 2135',
12956 'STATE 3 c 2138 2137',
12957 'STATE 3 n 42 2139',
12958 'STATE 3 r 42 2140',
12959 'STATE 2 i 247 68',
12960 'STATE 2 n 247 2141',
12961 'STATE 6 c 63 2142',
12962 'STATE 2 a 2144 2143',
12963 'STATE 4 d 68 2145',
12964 'STATE 2 i 68 2146',
12965 'STATE 1 h 68 2147',
12966 'STATE 1 r 68 2148',
12967 'STATE 3 n 2150 2149',
12968 'STATE 1 e 230 2151',
12969 'STATE 3 y 29 2152',
12970 'STATE 1 r 2154 2153',
12971 'STATE 3 h 2156 2155',
12972 'STATE 3 t 28 29',
12973 'STATE 3 m 2157 29',
12974 'STATE 3 f 29 2158',
12975 'STATE 5 g 230 29',
12976 'STATE 2 # 29 2159',
12977 'STATE 1 s 2161 2160',
12978 'STATE 6 l 2163 2162',
12979 'STATE 5 h 29 2164',
12980 'STATE 4 d 42 68',
12981 'STATE 6 e 68 2165',
12982 'STATE 6 # 2167 2166',
12983 'STATE 4 s 29 2168',
12984 'STATE 4 s 68 100',
12985 'STATE 2 h 29 2169',
12986 'STATE 2 c 100 2170',
12987 'STATE 5 u 1735 2171',
12988 'STATE 5 c 230 100',
12989 'STATE 1 s 29 2172',
12990 'STATE 6 s 29 68',
12991 'STATE 2 i 100 2173',
12992 'STATE 3 l 2175 2174',
12993 'STATE 6 h 68 29',
12994 'STATE 1 m 2176 68',
12995 'STATE 3 n 68 2177',
12996 'STATE 4 p 2179 2178',
12997 'STATE 4 b 68 2180',
12998 'STATE 6 h 100 2181',
12999 'STATE 6 a 2183 2182',
13000 'STATE 6 a 29 2184',
13001 'STATE 6 p 68 2185',
13002 'STATE 5 c 100 562',
13003 'STATE 6 i 100 2186',
13004 'STATE 1 0 100 2187',
13005 'STATE 3 n 68 2188',
13006 'STATE 4 l 68 1493',
13007 'STATE 5 r 2190 2189',
13008 'STATE 2 i 68 2191',
13009 'STATE 6 s 42 2192',
13010 'STATE 2 f 42 68',
13011 'STATE 2 g 2194 2193',
13012 'STATE 4 n 2195 68',
13013 'STATE 6 u 2197 2196',
13014 'STATE 4 c 2199 2198',
13015 'STATE 4 v 100 2200',
13016 'STATE 3 m 42 2201',
13017 'STATE 3 c 2203 2202',
13018 'STATE 4 c 2205 2204',
13019 'STATE 3 y 29 2206',
13020 'STATE 4 s 2208 2207',
13021 'STATE 4 c 2210 2209',
13022 'STATE 3 m 2212 2211',
13023 'STATE 5 k 100 2213',
13024 'STATE 5 m 562 2214',
13025 'STATE 6 t 100 2215',
13026 'STATE 3 m 42 2216',
13027 'STATE 3 y 29 2217',
13028 'STATE 3 m 68 230',
13029 'STATE 4 z 2219 2218',
13030 'STATE 4 g 42 230',
13031 'STATE 5 h 562 100',
13032 'STATE 3 s 82 230',
13033 'STATE 3 b 2221 2220',
13034 'STATE 3 h 68 2222',
13035 'STATE 4 m 29 2223',
13036 'STATE 2 o 68 2224',
13037 'STATE 1 e 68 2225',
13038 'STATE 3 m 68 2226',
13039 'STATE 3 c 100 2227',
13040 'STATE 4 n 100 2228',
13041 'STATE 4 n 100 2229',
13042 'STATE 4 b 100 2230',
13043 'STATE 4 v 230 68',
13044 'STATE 4 m 68 193',
13045 'STATE 6 i 28 42',
13046 'STATE 3 r 42 2231',
13047 'STATE 6 g 100 2232',
13048 'STATE 2 a 68 2233',
13049 'STATE 1 r 29 2234',
13050 'STATE 4 n 100 2235',
13051 'STATE 3 m 29 68',
13052 'STATE 3 t 2237 2236',
13053 'STATE 6 g 100 2238',
13054 'STATE 3 f 42 100',
13055 'STATE 4 v 42 2239',
13056 'STATE 2 c 247 2240',
13057 'STATE 3 k 82 2241',
13058 'STATE 1 a 2243 2242',
13059 'STATE 3 b 230 1423',
13060 'STATE 4 g 100 2244',
13061 'STATE 1 i 68 2245',
13062 'STATE 1 k 68 2246',
13063 'STATE 2 u 68 2247',
13064 'STATE 1 a 2249 2248',
13065 'STATE 5 d 909 230',
13066 'STATE 2 c 230 2250',
13067 'STATE 3 f 230 2251',
13068 'STATE 1 b 29 2252',
13069 'STATE 2 e 29 28',
13070 'STATE 2 c 29 230',
13071 'STATE 1 o 230 2253',
13072 'STATE 5 s 230 29',
13073 'STATE 5 s 29 2254',
13074 'STATE 5 n 230 29',
13075 'STATE 6 # 2256 2255',
13076 'STATE 3 i 247 2257',
13077 'STATE 4 t 2259 2258',
13078 'STATE 4 c 100 2260',
13079 'STATE 4 t 29 154',
13080 'STATE 4 g 2262 2261',
13081 'STATE 6 e 100 2263',
13082 'STATE 5 h 247 100',
13083 'STATE 3 r 29 100',
13084 'STATE 6 # 905 29',
13085 'STATE 6 i 100 2264',
13086 'STATE 2 n 100 2265',
13087 'STATE 4 d 2267 2266',
13088 'STATE 2 o 2269 2268',
13089 'STATE 2 g 562 2270',
13090 'STATE 2 e 68 2271',
13091 'STATE 2 b 68 100',
13092 'STATE 2 i 68 782',
13093 'STATE 5 t 2273 2272',
13094 'STATE 5 p 2274 100',
13095 'STATE 5 c 68 2275',
13096 'STATE 6 o 68 2276',
13097 'STATE 4 d 68 2277',
13098 'STATE 4 t 100 68',
13099 'STATE 4 q 100 1532',
13100 'STATE 6 d 100 2278',
13101 'STATE 6 g 100 82',
13102 'STATE 3 v 68 2279',
13103 'STATE 1 a 68 2280',
13104 'STATE 3 h 2282 2281',
13105 'STATE 4 g 42 2283',
13106 'STATE 5 l 2285 2284',
13107 'STATE 4 t 2287 2286',
13108 'STATE 4 n 2289 2288',
13109 'STATE 4 n 230 100',
13110 'STATE 5 d 68 29',
13111 'STATE 6 o 2291 2290',
13112 'STATE 5 q 2293 2292',
13113 'STATE 5 h 100 2294',
13114 'STATE 5 h 2296 2295',
13115 'STATE 3 l 230 2297',
13116 'STATE 3 p 1204 100',
13117 'STATE 5 k 2299 2298',
13118 'STATE 4 m 230 2300',
13119 'STATE 4 s 100 2301',
13120 'STATE 5 c 100 2302',
13121 'STATE 3 k 29 2303',
13122 'STATE 3 m 2304 100',
13123 'STATE 5 s 100 2305',
13124 'STATE 4 t 2306 100',
13125 'STATE 3 b 29 100',
13126 'STATE 3 l 100 2307',
13127 'STATE 5 c 2308 100',
13128 'STATE 3 p 230 100',
13129 'STATE 6 a 100 2309',
13130 'STATE 6 d 230 2310',
13131 'STATE 4 s 100 68',
13132 'STATE 6 g 100 2311',
13133 'STATE 3 s 2313 2312',
13134 'STATE 3 n 230 68',
13135 'STATE 6 s 82 2314',
13136 'STATE 6 o 68 2315',
13137 'STATE 3 g 230 100',
13138 'STATE 6 o 82 2316',
13139 'STATE 6 r 100 2317',
13140 'STATE 2 u 68 2318',
13141 'STATE 4 m 2320 2319',
13142 'STATE 4 g 100 2321',
13143 'STATE 3 c 100 2322',
13144 'STATE 4 c 68 596',
13145 'STATE 4 l 100 2323',
13146 'STATE 5 t 42 2324',
13147 'STATE 2 c 100 2325',
13148 'STATE 2 o 68 2326',
13149 'STATE 2 t 68 2327',
13150 'STATE 3 l 2287 29',
13151 'STATE 3 l 2329 2328',
13152 'STATE 6 r 2330 100',
13153 'STATE 4 m 100 2331',
13154 'STATE 3 t 42 2332',
13155 'STATE 6 # 247 68',
13156 'STATE 3 l 2334 2333',
13157 'STATE 4 f 68 2335',
13158 'STATE 4 d 29 2336',
13159 'STATE 4 t 100 562',
13160 'STATE 2 s 562 2337',
13161 'STATE 1 r 68 2338',
13162 'STATE 3 d 68 2339',
13163 'STATE 6 h 29 2340',
13164 'STATE 2 n 28 29',
13165 'STATE 1 r 230 29',
13166 'STATE 3 b 29 2341',
13167 'STATE 1 h 28 2342',
13168 'STATE 2 n 29 2343',
13169 'STATE 3 m 29 2344',
13170 'STATE 4 p 2346 2345',
13171 'STATE 4 h 68 2347',
13172 'STATE 2 q 29 2348',
13173 'STATE 6 a 29 2349',
13174 'STATE 2 n 100 2350',
13175 'STATE 1 n 100 230',
13176 'STATE 4 z 29 2351',
13177 'STATE 1 p 68 2352',
13178 'STATE 6 o 29 1722',
13179 'STATE 2 s 2354 2353',
13180 'STATE 3 v 68 2355',
13181 'STATE 1 m 2357 2356',
13182 'STATE 3 r 68 230',
13183 'STATE 6 r 68 2358',
13184 'STATE 1 i 29 2359',
13185 'STATE 6 t 68 2360',
13186 'STATE 6 i 100 2361',
13187 'STATE 6 e 2363 2362',
13188 'STATE 4 t 2364 100',
13189 'STATE 6 o 68 2365',
13190 'STATE 4 p 68 2366',
13191 'STATE 5 c 2365 2367',
13192 'STATE 6 e 100 2368',
13193 'STATE 4 p 68 2369',
13194 'STATE 2 c 100 82',
13195 'STATE 3 t 68 82',
13196 'STATE 3 y 2371 2370',
13197 'STATE 5 u 29 2372',
13198 'STATE 4 h 29 100',
13199 'STATE 3 h 2374 2373',
13200 'STATE 4 b 42 2375',
13201 'STATE 3 r 2377 2376',
13202 'STATE 2 p 68 100',
13203 'STATE 4 c 42 2378',
13204 'STATE 2 b 100 2379',
13205 'STATE 6 i 2381 2380',
13206 'STATE 5 k 2299 2382',
13207 'STATE 5 s 100 2383',
13208 'STATE 3 p 230 2384',
13209 'STATE 4 z 230 2385',
13210 'STATE 5 k 100 68',
13211 'STATE 6 i 247 68',
13212 'STATE 3 g 230 2386',
13213 'STATE 5 h 2388 2387',
13214 'STATE 4 c 100 29',
13215 'STATE 5 c 562 2389',
13216 'STATE 4 m 29 2390',
13217 'STATE 5 h 100 68',
13218 'STATE 3 n 100 2391',
13219 'STATE 4 c 68 2392',
13220 'STATE 3 h 42 2393',
13221 'STATE 3 m 100 2394',
13222 'STATE 3 c 2396 2395',
13223 'STATE 6 i 230 100',
13224 'STATE 6 e 562 2397',
13225 'STATE 4 v 230 2398',
13226 'STATE 6 d 100 2399',
13227 'STATE 3 m 68 2400',
13228 'STATE 4 m 100 230',
13229 'STATE 6 m 82 2401',
13230 'STATE 6 i 100 82',
13231 'STATE 6 e 82 29',
13232 'STATE 1 m 68 100',
13233 'STATE 4 m 29 2402',
13234 'STATE 4 l 2404 2403',
13235 'STATE 3 c 68 2405',
13236 'STATE 2 g 100 2406',
13237 'STATE 4 v 100 273',
13238 'STATE 3 l 2408 2407',
13239 'STATE 6 i 42 2409',
13240 'STATE 6 a 2411 2410',
13241 'STATE 4 b 230 68',
13242 'STATE 2 e 68 2412',
13243 'STATE 4 f 42 2413',
13244 'STATE 6 r 2330 2414',
13245 'STATE 4 v 230 42',
13246 'STATE 6 b 42 2415',
13247 'STATE 1 h 42 2416',
13248 'STATE 5 s 82 2417',
13249 'STATE 5 d 82 63',
13250 'STATE 4 b 100 2418',
13251 'STATE 4 t 562 2419',
13252 'STATE 1 a 562 68',
13253 'STATE 2 o 562 68',
13254 'STATE 1 l 68 2420',
13255 'STATE 3 i 29 2421',
13256 'STATE 3 m 2423 2422',
13257 'STATE 2 r 2425 2424',
13258 'STATE 1 i 230 2426',
13259 'STATE 3 b 2427 29',
13260 'STATE 5 r 2429 2428',
13261 'STATE 6 i 100 2430',
13262 'STATE 5 z 1669 2431',
13263 'STATE 3 r 100 2432',
13264 'STATE 6 # 29 558',
13265 'STATE 3 r 68 2433',
13266 'STATE 1 p 68 2434',
13267 'STATE 6 a 29 230',
13268 'STATE 2 d 100 2435',
13269 'STATE 3 t 562 100',
13270 'STATE 6 u 100 2436',
13271 'STATE 4 z 100 68',
13272 'STATE 2 c 100 896',
13273 'STATE 3 l 2438 2437',
13274 'STATE 6 o 29 2439',
13275 'STATE 1 a 100 2440',
13276 'STATE 6 e 1854 29',
13277 'STATE 4 c 2442 2441',
13278 'STATE 5 c 562 2443',
13279 'STATE 6 i 100 2444',
13280 'STATE 6 e 68 100',
13281 'STATE 4 t 68 2445',
13282 'STATE 6 a 100 2446',
13283 'STATE 6 l 562 100',
13284 'STATE 4 h 68 2447',
13285 'STATE 2 o 1825 2448',
13286 'STATE 5 t 68 100',
13287 'STATE 2 b 29 2449',
13288 'STATE 5 c 2451 2450',
13289 'STATE 5 g 42 2452',
13290 'STATE 3 h 100 2453',
13291 'STATE 3 l 100 2454',
13292 'STATE 6 n 100 2455',
13293 'STATE 6 n 42 2456',
13294 'STATE 2 s 100 273',
13295 'STATE 6 r 2458 2457',
13296 'STATE 5 t 2460 2459',
13297 'STATE 5 h 100 2461',
13298 'STATE 3 t 230 2462',
13299 'STATE 4 c 100 562',
13300 'STATE 6 r 562 2463',
13301 'STATE 4 p 100 2464',
13302 'STATE 5 r 2466 2465',
13303 'STATE 4 s 100 2467',
13304 'STATE 5 h 100 2468',
13305 'STATE 4 t 100 2469',
13306 'STATE 6 n 68 2470',
13307 'STATE 4 g 100 2471',
13308 'STATE 3 t 42 100',
13309 'STATE 3 g 100 756',
13310 'STATE 6 a 100 2472',
13311 'STATE 5 c 1980 100',
13312 'STATE 6 o 2473 100',
13313 'STATE 6 v 230 2474',
13314 'STATE 4 p 68 2475',
13315 'STATE 3 b 68 2476',
13316 'STATE 3 h 2477 100',
13317 'STATE 4 n 2478 1425',
13318 'STATE 6 g 100 2479',
13319 'STATE 6 g 68 2480',
13320 'STATE 2 # 68 2481',
13321 'STATE 4 n 100 256',
13322 'STATE 3 f 42 2482',
13323 'STATE 4 m 100 68',
13324 'STATE 6 o 42 28',
13325 'STATE 6 y 2484 2483',
13326 'STATE 3 r 42 68',
13327 'STATE 2 s 68 2485',
13328 'STATE 6 n 2487 2486',
13329 'STATE 4 t 42 68',
13330 'STATE 4 v 42 2488',
13331 'STATE 1 c 42 2489',
13332 'STATE 3 m 82 2490',
13333 'STATE 2 i 562 2491',
13334 'STATE 3 i 100 2492',
13335 'STATE 2 e 68 2493',
13336 'STATE 1 r 29 2494',
13337 'STATE 1 l 28 2495',
13338 'STATE 1 a 29 2496',
13339 'STATE 1 o 28 2497',
13340 'STATE 3 g 28 29',
13341 'STATE 2 r 230 29',
13342 'STATE 5 b 230 29',
13343 'STATE 5 h 2499 2498',
13344 'STATE 3 p 42 2500',
13345 'STATE 5 s 100 2501',
13346 'STATE 4 s 2503 2502',
13347 'STATE 3 h 100 2504',
13348 'STATE 3 l 42 68',
13349 'STATE 4 k 562 2505',
13350 'STATE 1 e 100 2506',
13351 'STATE 6 i 100 2507',
13352 'STATE 5 n 1207 2508',
13353 'STATE 6 e 2509 100',
13354 'STATE 5 n 100 29',
13355 'STATE 3 s 29 2510',
13356 'STATE 4 z 230 2511',
13357 'STATE 5 k 2513 2512',
13358 'STATE 5 v 100 2514',
13359 'STATE 6 e 68 2515',
13360 'STATE 4 d 68 100',
13361 'STATE 6 u 68 2516',
13362 'STATE 4 d 100 2517',
13363 'STATE 4 h 2519 2518',
13364 'STATE 4 t 100 2520',
13365 'STATE 2 o 68 2521',
13366 'STATE 2 f 230 100',
13367 'STATE 5 b 42 2069',
13368 'STATE 2 b 100 2522',
13369 'STATE 2 s 100 2523',
13370 'STATE 2 g 42 29',
13371 'STATE 6 s 29 2524',
13372 'STATE 5 z 2526 2525',
13373 'STATE 5 t 100 2527',
13374 'STATE 5 h 100 2528',
13375 'STATE 4 s 100 2529',
13376 'STATE 4 b 68 2530',
13377 'STATE 3 h 100 2213',
13378 'STATE 6 u 2532 2531',
13379 'STATE 3 f 100 2533',
13380 'STATE 4 b 100 2534',
13381 'STATE 4 g 42 2535',
13382 'STATE 4 t 100 2536',
13383 'STATE 5 t 2538 2537',
13384 'STATE 5 n 100 2539',
13385 'STATE 4 b 1416 2540',
13386 'STATE 5 z 230 100',
13387 'STATE 3 b 100 2541',
13388 'STATE 5 h 100 562',
13389 'STATE 4 g 230 2542',
13390 'STATE 3 j 68 2543',
13391 'STATE 4 v 2545 2544',
13392 'STATE 6 o 100 2315',
13393 'STATE 2 a 68 2546',
13394 'STATE 4 p 100 2547',
13395 'STATE 6 l 68 2548',
13396 'STATE 6 r 100 68',
13397 'STATE 4 v 100 2549',
13398 'STATE 4 n 68 2550',
13399 'STATE 3 l 68 42',
13400 'STATE 3 h 42 2551',
13401 'STATE 4 b 42 2552',
13402 'STATE 3 g 42 2553',
13403 'STATE 4 s 42 2554',
13404 'STATE 2 l 68 2555',
13405 'STATE 5 p 82 63',
13406 'STATE 3 u 562 2556',
13407 'STATE 4 c 562 100',
13408 'STATE 3 k 68 2557',
13409 'STATE 1 b 230 2558',
13410 'STATE 1 u 29 2559',
13411 'STATE 2 a 29 2560',
13412 'STATE 3 u 29 2561',
13413 'STATE 6 e 2563 2562',
13414 'STATE 3 t 100 2564',
13415 'STATE 6 e 2566 2565',
13416 'STATE 6 s 100 2567',
13417 'STATE 5 p 2569 2568',
13418 'STATE 5 s 2570 100',
13419 'STATE 4 s 100 29',
13420 'STATE 4 d 29 2571',
13421 'STATE 2 t 100 2572',
13422 'STATE 3 c 29 2573',
13423 'STATE 3 s 29 2574',
13424 'STATE 2 p 100 29',
13425 'STATE 1 d 100 2575',
13426 'STATE 5 j 68 2576',
13427 'STATE 6 i 100 2577',
13428 'STATE 6 n 562 100',
13429 'STATE 4 f 68 2578',
13430 'STATE 6 a 68 100',
13431 'STATE 6 i 2579 100',
13432 'STATE 6 n 230 2580',
13433 'STATE 2 i 2582 2581',
13434 'STATE 5 l 29 100',
13435 'STATE 5 p 1625 2583',
13436 'STATE 5 g 2585 2584',
13437 'STATE 2 s 1674 2586',
13438 'STATE 4 p 100 2587',
13439 'STATE 4 v 68 100',
13440 'STATE 5 h 2588 100',
13441 'STATE 4 c 68 100',
13442 'STATE 5 b 100 2589',
13443 'STATE 5 s 2591 2590',
13444 'STATE 4 t 2592 100',
13445 'STATE 4 s 100 2593',
13446 'STATE 6 o 2073 100',
13447 'STATE 5 s 230 100',
13448 'STATE 4 c 100 2594',
13449 'STATE 3 h 100 2595',
13450 'STATE 3 l 230 100',
13451 'STATE 4 p 562 100',
13452 'STATE 5 s 100 2596',
13453 'STATE 4 s 230 100',
13454 'STATE 4 g 100 230',
13455 'STATE 3 r 230 2597',
13456 'STATE 6 u 100 2598',
13457 'STATE 4 f 29 2599',
13458 'STATE 3 r 29 2600',
13459 'STATE 4 b 230 2601',
13460 'STATE 3 n 100 230',
13461 'STATE 2 i 68 29',
13462 'STATE 4 c 1416 2602',
13463 'STATE 6 p 100 2603',
13464 'STATE 4 m 42 2604',
13465 'STATE 6 n 2605 68',
13466 'STATE 1 a 68 42',
13467 'STATE 6 c 100 2606',
13468 'STATE 4 d 42 2607',
13469 'STATE 6 n 100 1353',
13470 'STATE 2 r 68 2608',
13471 'STATE 3 h 100 2609',
13472 'STATE 2 h 68 2610',
13473 'STATE 2 n 230 2611',
13474 'STATE 1 k 28 2612',
13475 'STATE 1 d 29 230',
13476 'STATE 3 t 28 2613',
13477 'STATE 6 o 2615 2614',
13478 'STATE 4 g 2617 2616',
13479 'STATE 3 f 29 2618',
13480 'STATE 6 i 2620 2619',
13481 'STATE 2 i 68 2621',
13482 'STATE 5 h 68 2622',
13483 'STATE 4 p 100 2623',
13484 'STATE 3 k 2624 100',
13485 'STATE 2 g 100 2625',
13486 'STATE 5 u 68 2626',
13487 'STATE 3 r 68 2627',
13488 'STATE 6 o 2317 68',
13489 'STATE 1 u 68 2628',
13490 'STATE 1 m 100 2629',
13491 'STATE 4 t 100 2630',
13492 'STATE 6 o 68 2631',
13493 'STATE 5 n 100 2632',
13494 'STATE 5 p 100 68',
13495 'STATE 6 r 100 2216',
13496 'STATE 6 i 2634 2633',
13497 'STATE 5 c 100 2635',
13498 'STATE 2 s 100 2636',
13499 'STATE 5 u 1891 100',
13500 'STATE 4 g 100 2637',
13501 'STATE 2 c 42 100',
13502 'STATE 3 h 100 68',
13503 'STATE 4 c 2638 100',
13504 'STATE 4 t 100 2639',
13505 'STATE 5 l 100 2640',
13506 'STATE 4 s 100 562',
13507 'STATE 3 b 230 100',
13508 'STATE 3 k 29 2641',
13509 'STATE 4 m 100 2642',
13510 'STATE 5 z 230 2643',
13511 'STATE 5 r 230 100',
13512 'STATE 3 l 230 2644',
13513 'STATE 6 i 1996 100',
13514 'STATE 3 l 100 2645',
13515 'STATE 4 g 100 2646',
13516 'STATE 3 t 100 230',
13517 'STATE 3 p 68 2647',
13518 'STATE 3 v 100 2648',
13519 'STATE 4 p 230 42',
13520 'STATE 4 t 100 2649',
13521 'STATE 3 p 2651 2650',
13522 'STATE 3 p 100 1825',
13523 'STATE 1 e 42 2652',
13524 'STATE 2 t 100 2653',
13525 'STATE 1 e 68 2654',
13526 'STATE 5 s 29 2655',
13527 'STATE 3 t 28 2656',
13528 'STATE 1 a 28 2657',
13529 'STATE 6 h 100 2658',
13530 'STATE 5 n 230 2659',
13531 'STATE 3 m 68 2660',
13532 'STATE 1 r 100 42',
13533 'STATE 4 t 2662 2661',
13534 'STATE 3 l 29 2663',
13535 'STATE 3 i 68 100',
13536 'STATE 3 s 68 42',
13537 'STATE 3 s 68 100',
13538 'STATE 3 v 562 2664',
13539 'STATE 2 n 562 100',
13540 'STATE 1 a 68 100',
13541 'STATE 5 h 68 2665',
13542 'STATE 1 o 100 2666',
13543 'STATE 6 e 2668 2667',
13544 'STATE 6 r 2670 2669',
13545 'STATE 5 f 2672 2671',
13546 'STATE 6 u 68 100',
13547 'STATE 4 d 2673 100',
13548 'STATE 6 o 2675 2674',
13549 'STATE 3 r 2676 100',
13550 'STATE 3 n 1423 2677',
13551 'STATE 5 t 2678 100',
13552 'STATE 3 r 42 100',
13553 'STATE 3 b 29 2679',
13554 'STATE 4 f 100 2680',
13555 'STATE 3 c 2073 2681',
13556 'STATE 5 b 2683 2682',
13557 'STATE 6 i 100 2684',
13558 'STATE 5 l 100 2685',
13559 'STATE 4 c 100 2686',
13560 'STATE 6 m 68 2687',
13561 'STATE 6 y 2689 2688',
13562 'STATE 4 t 100 2690',
13563 'STATE 6 b 100 230',
13564 'STATE 2 t 68 2691',
13565 'STATE 3 n 2693 2692',
13566 'STATE 6 r 68 2694',
13567 'STATE 2 n 68 42',
13568 'STATE 1 d 68 2695',
13569 'STATE 1 m 100 2696',
13570 'STATE 6 o 29 2697',
13571 'STATE 1 o 29 2698',
13572 'STATE 1 i 28 2699',
13573 'STATE 5 k 2701 2700',
13574 'STATE 5 z 29 2702',
13575 'STATE 3 s 68 2703',
13576 'STATE 2 h 100 2704',
13577 'STATE 2 m 68 2705',
13578 'STATE 3 r 28 68',
13579 'STATE 2 t 100 2706',
13580 'STATE 6 # 68 2707',
13581 'STATE 6 # 100 68',
13582 'STATE 5 t 2709 2708',
13583 'STATE 5 t 29 100',
13584 'STATE 3 h 100 2710',
13585 'STATE 3 x 100 29',
13586 'STATE 5 s 2712 2711',
13587 'STATE 6 o 68 2713',
13588 'STATE 5 d 68 100',
13589 'STATE 6 a 2715 2714',
13590 'STATE 3 l 2717 2716',
13591 'STATE 4 n 2719 2718',
13592 'STATE 4 n 29 230',
13593 'STATE 4 n 100 562',
13594 'STATE 6 t 29 100',
13595 'STATE 4 m 100 2299',
13596 'STATE 3 z 230 2720',
13597 'STATE 3 c 100 2721',
13598 'STATE 3 r 68 100',
13599 'STATE 3 m 100 2722',
13600 'STATE 4 m 100 2723',
13601 'STATE 6 l 230 2724',
13602 'STATE 6 u 68 2725',
13603 'STATE 3 t 100 2726',
13604 'STATE 3 m 29 100',
13605 'STATE 3 c 230 2727',
13606 'STATE 3 v 68 2728',
13607 'STATE 4 t 42 2729',
13608 'STATE 6 r 42 68',
13609 'STATE 4 l 42 230',
13610 'STATE 3 v 68 2730',
13611 'STATE 3 c 68 2731',
13612 'STATE 3 c 29 2732',
13613 'STATE 1 a 29 2733',
13614 'STATE 3 r 29 2734',
13615 'STATE 3 l 100 2735',
13616 'STATE 6 s 100 2736',
13617 'STATE 4 s 29 1860',
13618 'STATE 3 n 562 2737',
13619 'STATE 6 i 2739 2738',
13620 'STATE 3 n 68 2740',
13621 'STATE 5 h 2742 2741',
13622 'STATE 6 o 68 1722',
13623 'STATE 5 z 29 2743',
13624 'STATE 1 n 68 2744',
13625 'STATE 6 i 100 2745',
13626 'STATE 6 u 562 2746',
13627 'STATE 4 b 2747 100',
13628 'STATE 6 i 68 2748',
13629 'STATE 3 v 68 2749',
13630 'STATE 5 c 2194 2750',
13631 'STATE 5 k 100 2751',
13632 'STATE 5 b 562 100',
13633 'STATE 2 g 100 2752',
13634 'STATE 5 c 562 100',
13635 'STATE 3 v 100 2753',
13636 'STATE 3 t 2754 100',
13637 'STATE 6 o 68 29',
13638 'STATE 5 m 100 2755',
13639 'STATE 4 t 100 2756',
13640 'STATE 4 s 100 2757',
13641 'STATE 6 h 29 2758',
13642 'STATE 4 k 68 2759',
13643 'STATE 4 l 68 2760',
13644 'STATE 4 s 42 2761',
13645 'STATE 2 r 2763 2762',
13646 'STATE 3 s 68 2764',
13647 'STATE 2 e 230 29',
13648 'STATE 3 i 28 2765',
13649 'STATE 2 t 28 2766',
13650 'STATE 4 c 29 2767',
13651 'STATE 2 e 100 2768',
13652 'STATE 2 o 2216 2769',
13653 'STATE 4 c 2771 2770',
13654 'STATE 3 h 29 68',
13655 'STATE 2 o 100 2772',
13656 'STATE 2 l 2774 2773',
13657 'STATE 4 t 1287 68',
13658 'STATE 5 j 29 2295',
13659 'STATE 1 o 230 2775',
13660 'STATE 1 s 100 2776',
13661 'STATE 5 d 2778 2777',
13662 'STATE 6 t 68 1204',
13663 'STATE 6 l 68 100',
13664 'STATE 5 u 2779 100',
13665 'STATE 4 g 100 2780',
13666 'STATE 5 n 230 2781',
13667 'STATE 5 h 42 100',
13668 'STATE 5 c 2782 100',
13669 'STATE 5 p 100 562',
13670 'STATE 3 z 230 2783',
13671 'STATE 4 m 100 2784',
13672 'STATE 6 w 68 2785',
13673 'STATE 4 v 29 2786',
13674 'STATE 2 # 2788 2787',
13675 'STATE 4 c 42 2789',
13676 'STATE 4 v 42 2790',
13677 'STATE 2 u 562 2791',
13678 'STATE 1 e 100 1425',
13679 'STATE 3 t 68 2792',
13680 'STATE 1 m 28 2793',
13681 'STATE 2 i 28 2794',
13682 'STATE 1 i 100 2795',
13683 'STATE 2 u 29 2796',
13684 'STATE 3 h 2798 2797',
13685 'STATE 6 e 100 68',
13686 'STATE 2 e 29 2799',
13687 'STATE 2 e 100 68',
13688 'STATE 5 k 2801 2800',
13689 'STATE 4 m 68 2802',
13690 'STATE 2 r 100 2803',
13691 'STATE 6 o 100 2804',
13692 'STATE 6 a 2806 2805',
13693 'STATE 4 b 100 2807',
13694 'STATE 2 s 2601 100',
13695 'STATE 4 m 100 2808',
13696 'STATE 2 f 100 2809',
13697 'STATE 3 f 100 230',
13698 'STATE 3 p 2811 2810',
13699 'STATE 3 c 100 2812',
13700 'STATE 4 d 100 2813',
13701 'STATE 6 k 29 2814',
13702 'STATE 4 v 230 2815',
13703 'STATE 6 r 68 2816',
13704 'STATE 4 v 68 230',
13705 'STATE 3 d 42 2817',
13706 'STATE 2 c 100 2818',
13707 'STATE 2 a 68 2819',
13708 'STATE 2 o 29 2820',
13709 'STATE 3 b 28 2821',
13710 'STATE 5 p 100 2822',
13711 'STATE 4 s 29 2823',
13712 'STATE 4 s 2824 100',
13713 'STATE 5 m 100 68',
13714 'STATE 1 t 29 68',
13715 'STATE 1 o 100 2825',
13716 'STATE 1 o 68 2826',
13717 'STATE 5 s 562 68',
13718 'STATE 2 n 100 2827',
13719 'STATE 1 l 100 2828',
13720 'STATE 5 k 562 2829',
13721 'STATE 5 v 68 100',
13722 'STATE 6 i 68 100',
13723 'STATE 4 n 100 2830',
13724 'STATE 5 h 29 100',
13725 'STATE 5 t 2832 2831',
13726 'STATE 5 s 230 2538',
13727 'STATE 3 p 100 230',
13728 'STATE 3 s 100 2748',
13729 'STATE 4 z 68 2833',
13730 'STATE 4 b 68 2834',
13731 'STATE 4 n 68 1799',
13732 'STATE 6 a 42 2835',
13733 'STATE 3 b 100 2836',
13734 'STATE 1 a 68 2837',
13735 'STATE 2 a 29 2838',
13736 'STATE 3 n 28 2839',
13737 'STATE 2 s 100 2840',
13738 'STATE 1 a 100 2841',
13739 'STATE 3 p 100 2625',
13740 'STATE 2 s 100 2842',
13741 'STATE 3 s 68 2843',
13742 'STATE 6 a 100 2844',
13743 'STATE 3 m 2770 100',
13744 'STATE 6 i 562 2845',
13745 'STATE 2 f 100 2846',
13746 'STATE 3 k 100 2847',
13747 'STATE 4 t 230 100',
13748 'STATE 3 l 68 2848',
13749 'STATE 4 g 68 100',
13750 'STATE 6 r 2850 2849',
13751 'STATE 3 p 100 2851',
13752 'STATE 2 o 2852 68',
13753 'STATE 2 i 29 28',
13754 'STATE 2 s 28 2853',
13755 'STATE 1 m 100 2854',
13756 'STATE 2 c 100 29',
13757 'STATE 3 c 100 2855',
13758 'STATE 1 a 68 1853',
13759 'STATE 2 s 100 2856',
13760 'STATE 5 v 100 2857',
13761 'STATE 5 u 100 2858',
13762 'STATE 5 g 100 2859',
13763 'STATE 4 h 68 2860',
13764 'STATE 4 n 100 1552',
13765 'STATE 4 m 42 2861',
13766 'STATE 2 g 100 2862',
13767 'STATE 1 d 29 68',
13768 'STATE 3 g 28 2863',
13769 'STATE 5 m 2865 2864',
13770 'STATE 2 g 68 2866',
13771 'STATE 3 r 100 2867',
13772 'STATE 5 n 100 2868',
13773 'STATE 3 l 100 1227',
13774 'STATE 3 r 100 2869',
13775 'STATE 6 m 230 100',
13776 'STATE 4 d 100 2870',
13777 'STATE 2 e 2183 2871',
13778 'STATE 2 c 28 240',
13779 'STATE 5 b 100 2872',
13780 'STATE 6 a 100 562',
13781 'STATE 4 m 68 2873',
13782 'STATE 2 a 100 2874',
13783 'STATE 4 b 100 2875',
13784 'STATE 5 c 2876 100',
13785 'STATE 3 g 100 42',
13786 'STATE 4 p 100 2877',
13787 'STATE 2 l 2879 2878',
13788 'STATE 3 r 100 2880',
13789 'STATE 6 i 100 29',
13790 'STATE 5 m 562 68',
13791 'STATE 4 c 100 230',
13792 'STATE 3 i 100 2881',
13793 'STATE 5 s 2883 2882',
13794 'STATE 1 a 230 68',
13795 'STATE 5 s 100 68',
13796 'STATE 1 c 68 2884',
13797 'STATE 3 p 230 2885',
13798 'STATE 1 a 68 2886',
13799 'STATE 3 r 2183 2887',
13800 'STATE 4 g 100 2888',
13801 'STATE 4 s 2889 29',
13802 'STATE 4 d 562 2890',
13803 'STATE 4 d 100 2891',
13804 'STATE 2 o 29 100',
13805 'STATE 4 t 100 2892',
13806 'STATE 5 c 100 68',
13807 'STATE 3 m 562 2893',
13808 'STATE 2 s 562 100',
13809 'INDEX 2894 b',
13810 'STATE 4 b 2896 2895',
13811 'STATE 3 m 2898 2897',
13812 'STATE 1 c 2900 2899',
13813 'STATE 4 t 2902 2901',
13814 'STATE 4 # 2899 2903',
13815 'PHONE epsilon',
13816 'STATE 2 r 2904 2899',
13817 'PHONE b',
13818 'STATE 1 d 2899 2905',
13819 'STATE 4 s 2899 2906',
13820 'STATE 3 a 2899 2901',
13821 'STATE 2 d 2899 2901',
13822 'STATE 2 o 2908 2907',
13823 'STATE 1 l 2910 2909',
13824 'STATE 4 a 2901 2911',
13825 'STATE 2 u 2912 2901',
13826 'STATE 2 i 2913 2901',
13827 'STATE 1 b 2899 2914',
13828 'STATE 1 d 2899 2901',
13829 'STATE 4 e 2899 2901',
13830 'STATE 1 c 2913 2901',
13831 'INDEX 2915 c',
13832 'STATE 4 k 2917 2916',
13833 'STATE 4 h 2919 2918',
13834 'STATE 5 i 2921 2920',
13835 'STATE 4 e 2923 2922',
13836 'STATE 3 s 2925 2924',
13837 'PHONE epsilon',
13838 'STATE 6 # 2926 2920',
13839 'STATE 4 i 2928 2927',
13840 'STATE 3 s 2920 2929',
13841 'STATE 3 t 2931 2930',
13842 'STATE 2 t 2931 2932',
13843 'STATE 1 # 2920 2933',
13844 'STATE 4 c 2935 2934',
13845 'STATE 3 s 2937 2936',
13846 'STATE 3 m 2939 2938',
13847 'STATE 2 0 2941 2940',
13848 'PHONE ch',
13849 'STATE 5 o 2943 2942',
13850 'STATE 1 o 2945 2944',
13851 'STATE 4 y 2947 2946',
13852 'STATE 5 e 2949 2948',
13853 'STATE 5 a 2951 2950',
13854 'STATE 5 a 2953 2952',
13855 'STATE 3 x 2920 2954',
13856 'PHONE k',
13857 'STATE 3 n 2956 2955',
13858 'STATE 5 r 2939 2957',
13859 'STATE 5 i 2959 2958',
13860 'STATE 6 o 2939 2920',
13861 'STATE 1 a 2961 2960',
13862 'PHONE t-s',
13863 'STATE 4 z 2963 2962',
13864 'STATE 5 r 2939 2964',
13865 'STATE 5 i 2965 2920',
13866 'STATE 3 a 2939 2966',
13867 'STATE 3 c 2968 2967',
13868 'STATE 6 l 2970 2969',
13869 'STATE 1 p 2931 2920',
13870 'STATE 1 0 2920 2931',
13871 'STATE 5 k 2972 2971',
13872 'STATE 2 v 2931 2973',
13873 'STATE 5 o 2975 2974',
13874 'STATE 5 l 2939 2976',
13875 'STATE 6 d 2978 2977',
13876 'STATE 1 0 2920 2939',
13877 'STATE 3 i 2945 2979',
13878 'STATE 2 l 2920 2945',
13879 'STATE 4 g 2920 2980',
13880 'STATE 2 s 2920 2931',
13881 'PHONE s',
13882 'STATE 6 # 2920 2981',
13883 'STATE 2 s 2939 2920',
13884 'STATE 6 u 2983 2982',
13885 'STATE 5 # 2931 2984',
13886 'STATE 3 i 2970 2985',
13887 'PHONE sh',
13888 'STATE 6 n 2987 2986',
13889 'STATE 3 i 2931 2988',
13890 'STATE 2 e 2990 2989',
13891 'STATE 6 l 2992 2991',
13892 'STATE 6 r 2939 2993',
13893 'STATE 5 a 2995 2994',
13894 'STATE 1 0 2997 2996',
13895 'STATE 5 a 2920 2939',
13896 'STATE 1 r 2945 2998',
13897 'STATE 4 q 2920 2999',
13898 'STATE 6 d 2939 3000',
13899 'STATE 3 x 2920 3001',
13900 'STATE 5 o 2970 2964',
13901 'STATE 5 o 2931 3002',
13902 'STATE 6 t 3004 3003',
13903 'STATE 2 0 3006 3005',
13904 'STATE 5 a 2970 2964',
13905 'STATE 1 # 2931 3007',
13906 'STATE 5 e 3009 3008',
13907 'STATE 3 i 2939 3010',
13908 'STATE 5 e 2931 3011',
13909 'STATE 2 i 2931 2970',
13910 'STATE 6 # 2931 2939',
13911 'STATE 6 v 2931 3012',
13912 'STATE 6 r 2931 3013',
13913 'STATE 5 a 3014 2920',
13914 'STATE 6 m 3015 2920',
13915 'STATE 2 r 2945 3016',
13916 'STATE 3 k 2920 3017',
13917 'STATE 6 a 2920 3018',
13918 'STATE 6 n 3020 3019',
13919 'STATE 1 # 2964 3021',
13920 'STATE 3 c 2931 3022',
13921 'STATE 1 p 2970 2964',
13922 'STATE 5 o 2970 3023',
13923 'STATE 5 n 2964 3024',
13924 'STATE 1 o 2931 3025',
13925 'STATE 3 e 3027 3026',
13926 'STATE 6 r 3029 3028',
13927 'STATE 3 c 2939 3030',
13928 'STATE 1 s 2939 3031',
13929 'STATE 6 r 3033 3032',
13930 'STATE 6 u 2970 2931',
13931 'STATE 6 r 3034 2920',
13932 'STATE 5 e 2939 2920',
13933 'STATE 3 a 2945 3035',
13934 'STATE 3 n 3037 3036',
13935 'STATE 3 a 3038 2920',
13936 'STATE 3 m 2939 3039',
13937 'STATE 2 f 2970 3040',
13938 'STATE 1 v 2964 2931',
13939 'STATE 1 0 2931 3041',
13940 'STATE 6 c 3043 3042',
13941 'STATE 6 s 2964 3044',
13942 'STATE 1 a 2931 3045',
13943 'STATE 2 b 3047 3046',
13944 'STATE 2 i 3049 3048',
13945 'STATE 6 n 3051 3050',
13946 'STATE 3 a 2939 3052',
13947 'STATE 3 u 2939 3053',
13948 'STATE 5 # 2931 3054',
13949 'STATE 6 a 3056 3055',
13950 'STATE 5 o 2939 2931',
13951 'STATE 1 d 2931 2939',
13952 'STATE 3 o 2945 2920',
13953 'STATE 2 u 3058 3057',
13954 'STATE 1 r 3059 2939',
13955 'STATE 1 # 2939 2920',
13956 'STATE 5 e 3061 3060',
13957 'STATE 5 n 2964 3062',
13958 'STATE 3 n 2931 3063',
13959 'STATE 3 n 3065 3064',
13960 'STATE 2 a 2931 2964',
13961 'STATE 5 m 2964 3066',
13962 'STATE 3 a 2964 2931',
13963 'STATE 3 c 2939 3067',
13964 'STATE 5 # 2939 3068',
13965 'STATE 5 a 3070 3069',
13966 'STATE 5 # 2931 2939',
13967 'STATE 6 l 3072 3071',
13968 'STATE 3 r 2931 2939',
13969 'STATE 1 r 2931 3073',
13970 'STATE 3 r 3074 2931',
13971 'STATE 6 s 2931 3075',
13972 'STATE 6 m 3076 2931',
13973 'STATE 5 i 2939 2931',
13974 'STATE 4 # 2939 3077',
13975 'STATE 4 l 2920 2939',
13976 'STATE 5 i 2964 2939',
13977 'STATE 5 # 3079 3078',
13978 'STATE 6 # 2939 3080',
13979 'STATE 3 n 2931 2964',
13980 'STATE 6 n 2970 3081',
13981 'STATE 5 l 3083 3082',
13982 'STATE 5 n 3084 2964',
13983 'STATE 6 u 2931 3085',
13984 'STATE 2 o 3087 3086',
13985 'STATE 1 # 3088 2931',
13986 'STATE 5 i 3090 3089',
13987 'STATE 2 m 2939 2931',
13988 'STATE 6 t 3092 3091',
13989 'STATE 2 r 2970 3093',
13990 'STATE 3 e 2939 3094',
13991 'STATE 5 a 2931 3095',
13992 'STATE 1 r 2931 3096',
13993 'STATE 5 e 2939 2931',
13994 'STATE 1 n 3097 2939',
13995 'STATE 6 g 2964 3098',
13996 'STATE 3 i 2931 3099',
13997 'STATE 3 n 2964 3100',
13998 'STATE 3 r 2964 3101',
13999 'STATE 1 a 3103 3102',
14000 'STATE 6 e 2964 3104',
14001 'STATE 1 v 2931 2964',
14002 'STATE 5 p 2964 3105',
14003 'STATE 2 u 3107 3106',
14004 'STATE 3 r 3108 2931',
14005 'STATE 6 e 2939 3109',
14006 'STATE 1 c 3110 2939',
14007 'STATE 6 n 2931 2939',
14008 'STATE 6 m 3112 3111',
14009 'STATE 2 a 2939 3113',
14010 'STATE 3 a 2931 2939',
14011 'STATE 1 # 2931 3114',
14012 'STATE 1 k 2931 3115',
14013 'STATE 6 n 2931 3116',
14014 'STATE 4 t 3117 2939',
14015 'STATE 5 n 3119 3118',
14016 'STATE 3 a 2931 2964',
14017 'STATE 3 r 2939 3120',
14018 'STATE 3 a 2931 2970',
14019 'STATE 5 s 3122 3121',
14020 'STATE 3 i 2964 3099',
14021 'STATE 3 a 2964 3123',
14022 'STATE 6 t 2964 3124',
14023 'STATE 5 i 3126 3125',
14024 'STATE 5 a 3127 2931',
14025 'STATE 5 a 2931 3056',
14026 'STATE 6 n 2939 3128',
14027 'STATE 2 h 2931 2939',
14028 'STATE 2 s 2939 3129',
14029 'STATE 3 o 2939 3130',
14030 'STATE 1 # 2970 3131',
14031 'STATE 3 r 3133 3132',
14032 'STATE 5 e 2931 2939',
14033 'STATE 2 i 2931 3134',
14034 'STATE 3 i 3135 2939',
14035 'STATE 3 i 2964 3136',
14036 'STATE 2 m 2939 3137',
14037 'STATE 2 0 2931 3138',
14038 'STATE 6 # 2964 3139',
14039 'STATE 6 t 2920 2964',
14040 'STATE 6 y 2964 3140',
14041 'STATE 5 r 3141 2964',
14042 'STATE 5 a 3143 3142',
14043 'STATE 3 a 3145 3144',
14044 'STATE 1 p 2931 2970',
14045 'STATE 6 a 2939 3146',
14046 'STATE 6 d 2931 3147',
14047 'STATE 1 # 2931 2939',
14048 'STATE 3 o 2970 2931',
14049 'STATE 2 o 2931 2939',
14050 'STATE 2 a 2931 2939',
14051 'STATE 5 a 3148 2931',
14052 'STATE 2 d 2920 2939',
14053 'STATE 5 c 3150 3149',
14054 'STATE 6 s 2931 3151',
14055 'STATE 6 s 2964 3152',
14056 'STATE 6 o 2964 3153',
14057 'STATE 1 m 3155 3154',
14058 'STATE 6 e 2964 3156',
14059 'STATE 6 w 3158 3157',
14060 'STATE 6 e 2939 3159',
14061 'STATE 3 r 2939 3160',
14062 'STATE 6 e 2931 3161',
14063 'STATE 3 u 2939 2931',
14064 'STATE 6 v 2931 3162',
14065 'STATE 6 r 2931 2939',
14066 'STATE 5 o 3164 3163',
14067 'STATE 1 0 2964 2931',
14068 'STATE 1 m 2931 3165',
14069 'STATE 3 a 2970 2964',
14070 'STATE 3 i 2964 3166',
14071 'STATE 2 a 2964 3167',
14072 'STATE 6 l 2964 2931',
14073 'STATE 6 a 2964 3168',
14074 'STATE 3 o 3170 3169',
14075 'STATE 3 a 2920 2931',
14076 'STATE 1 0 2939 3171',
14077 'STATE 2 s 2939 3172',
14078 'STATE 2 m 2970 3173',
14079 'STATE 1 l 2931 3174',
14080 'STATE 5 u 2964 3175',
14081 'STATE 3 o 2964 3176',
14082 'STATE 6 o 2931 3177',
14083 'STATE 2 e 2964 3178',
14084 'STATE 6 l 3179 2964',
14085 'STATE 6 v 2964 2931',
14086 'STATE 2 r 3181 3180',
14087 'STATE 5 u 2931 2939',
14088 'STATE 3 r 3183 3182',
14089 'STATE 2 a 2931 3184',
14090 'STATE 1 s 2970 2993',
14091 'STATE 6 c 2931 3185',
14092 'STATE 5 k 2931 3186',
14093 'STATE 6 # 3187 2931',
14094 'STATE 3 l 2931 3188',
14095 'STATE 2 d 2964 3189',
14096 'STATE 3 i 2964 3190',
14097 'STATE 2 l 3192 3191',
14098 'STATE 1 # 2931 3193',
14099 'STATE 6 u 2970 3194',
14100 'STATE 1 # 2970 2939',
14101 'STATE 2 m 2931 3195',
14102 'STATE 3 u 3197 3196',
14103 'STATE 5 m 3199 3198',
14104 'STATE 3 a 2964 3200',
14105 'STATE 6 a 3201 2964',
14106 'STATE 5 r 3203 3202',
14107 'STATE 1 p 2964 2931',
14108 'STATE 2 y 2920 3204',
14109 'STATE 5 # 2939 3205',
14110 'STATE 3 a 3049 2939',
14111 'STATE 3 u 3207 3206',
14112 'STATE 3 o 3208 2931',
14113 'STATE 2 o 3210 3209',
14114 'STATE 6 # 2970 2931',
14115 'STATE 3 e 2964 3211',
14116 'STATE 1 0 2931 2964',
14117 'STATE 1 c 2931 2964',
14118 'STATE 1 l 2964 2931',
14119 'STATE 3 e 2964 3212',
14120 'STATE 2 r 2964 3213',
14121 'STATE 5 # 3215 3214',
14122 'STATE 5 l 2939 3216',
14123 'STATE 3 a 3218 3217',
14124 'STATE 6 r 2939 2931',
14125 'STATE 2 r 2939 2931',
14126 'STATE 1 c 2939 3219',
14127 'STATE 1 # 2939 2931',
14128 'STATE 1 # 3220 2964',
14129 'STATE 2 l 2964 3221',
14130 'STATE 1 # 3045 2964',
14131 'STATE 3 y 2939 3222',
14132 'STATE 1 # 2931 3223',
14133 'STATE 6 e 2939 3224',
14134 'STATE 3 i 2931 3225',
14135 'STATE 1 # 3207 2931',
14136 'STATE 2 r 3227 3226',
14137 'STATE 6 a 2931 2964',
14138 'STATE 1 s 2964 3228',
14139 'STATE 6 l 2939 3229',
14140 'STATE 1 t 2931 3230',
14141 'STATE 5 t 2931 2939',
14142 'STATE 3 o 2939 2931',
14143 'STATE 1 a 2931 3231',
14144 'STATE 3 i 2931 3232',
14145 'STATE 1 f 2964 3233',
14146 'STATE 5 u 2931 3234',
14147 'STATE 1 a 2920 3235',
14148 'STATE 2 a 2931 3236',
14149 'STATE 3 o 2931 2939',
14150 'STATE 6 e 2964 3237',
14151 'STATE 5 o 3239 3238',
14152 'STATE 1 o 2939 3240',
14153 'STATE 1 # 2931 3197',
14154 'STATE 1 t 2964 3241',
14155 'STATE 6 i 3051 3242',
14156 'STATE 6 # 2931 3243',
14157 'STATE 1 u 2939 3244',
14158 'STATE 3 a 3245 2964',
14159 'STATE 2 n 2939 3246',
14160 'STATE 1 0 2939 2931',
14161 'STATE 3 a 2939 3247',
14162 'STATE 2 f 2964 3248',
14163 'STATE 1 # 3250 3249',
14164 'STATE 1 r 2939 3251',
14165 'STATE 5 t 2964 3252',
14166 'STATE 5 m 2931 2939',
14167 'STATE 5 y 2931 3253',
14168 'STATE 3 i 2931 3254',
14169 'STATE 1 # 2964 3255',
14170 'STATE 2 m 2931 3256',
14171 'STATE 2 a 2931 3257',
14172 'STATE 1 g 2964 3258',
14173 'STATE 6 a 2931 2939',
14174 'STATE 2 i 2931 2939',
14175 'STATE 1 r 2964 3259',
14176 'STATE 5 # 2964 2931',
14177 'INDEX 3260 d',
14178 'STATE 4 # 3262 3261',
14179 'STATE 4 d 3264 3263',
14180 'STATE 3 e 3266 3265',
14181 'STATE 4 g 3268 3267',
14182 'STATE 2 g 3270 3269',
14183 'PHONE d',
14184 'STATE 2 k 3272 3271',
14185 'STATE 4 t 3274 3273',
14186 'STATE 5 e 3276 3275',
14187 'STATE 3 o 3276 3277',
14188 'STATE 3 o 3265 3276',
14189 'STATE 2 h 3279 3278',
14190 'PHONE t',
14191 'STATE 4 j 3276 3280',
14192 'STATE 5 # 3282 3281',
14193 'STATE 5 r 3265 3283',
14194 'PHONE epsilon',
14195 'STATE 2 b 3276 3284',
14196 'STATE 2 p 3272 3285',
14197 'STATE 1 t 3265 3286',
14198 'STATE 3 d 3288 3287',
14199 'STATE 1 # 3265 3289',
14200 'STATE 3 u 3265 3270',
14201 'STATE 5 a 3265 3290',
14202 'STATE 3 e 3292 3291',
14203 'STATE 2 c 3272 3293',
14204 'STATE 1 g 3265 3272',
14205 'STATE 4 u 3295 3294',
14206 'STATE 2 e 3297 3296',
14207 'STATE 5 h 3265 3298',
14208 'STATE 5 o 3265 3276',
14209 'STATE 5 y 3276 3299',
14210 'STATE 5 y 3265 3300',
14211 'STATE 2 s 3302 3301',
14212 'STATE 4 z 3303 3265',
14213 'STATE 2 0 3265 3304',
14214 'STATE 4 e 3306 3305',
14215 'STATE 4 y 3276 3307',
14216 'STATE 1 o 3265 3308',
14217 'STATE 5 i 3276 3309',
14218 'STATE 6 r 3276 3310',
14219 'STATE 2 f 3272 3311',
14220 'STATE 1 s 3272 3312',
14221 'STATE 6 # 3265 3313',
14222 'STATE 5 a 3315 3314',
14223 'STATE 1 # 3265 3316',
14224 'STATE 1 b 3265 3317',
14225 'STATE 6 # 3265 3318',
14226 'STATE 5 k 3265 3276',
14227 'STATE 2 m 3276 3319',
14228 'STATE 2 p 3265 3276',
14229 'STATE 2 x 3272 3265',
14230 'STATE 1 r 3272 3320',
14231 'STATE 6 k 3265 3321',
14232 'STATE 5 l 3323 3322',
14233 'STATE 1 g 3321 3324',
14234 'STATE 1 w 3265 3325',
14235 'STATE 1 l 3265 3326',
14236 'STATE 1 p 3276 3327',
14237 'STATE 6 d 3276 3328',
14238 'STATE 1 a 3272 3329',
14239 'PHONE jh',
14240 'STATE 3 e 3330 3265',
14241 'STATE 3 o 3321 3331',
14242 'STATE 3 i 3321 3265',
14243 'STATE 6 d 3265 3332',
14244 'STATE 5 d 3265 3333',
14245 'STATE 5 r 3265 3334',
14246 'STATE 2 w 3265 3335',
14247 'STATE 1 n 3272 3336',
14248 'STATE 1 # 3265 3337',
14249 'STATE 2 h 3321 3338',
14250 'STATE 2 a 3340 3339',
14251 'STATE 1 m 3265 3341',
14252 'STATE 4 i 3265 3342',
14253 'STATE 1 s 3344 3343',
14254 'STATE 1 i 3265 3345',
14255 'STATE 1 0 3321 3346',
14256 'STATE 6 t 3265 3347',
14257 'STATE 1 r 3348 3265',
14258 'STATE 6 # 3265 3349',
14259 'STATE 1 s 3265 3350',
14260 'STATE 5 # 3276 3265',
14261 'STATE 2 p 3276 3351',
14262 'STATE 2 h 3265 3276',
14263 'STATE 1 o 3265 3352',
14264 'STATE 5 c 3265 3321',
14265 'STATE 2 i 3265 3353',
14266 'STATE 2 i 3276 3265',
14267 'STATE 1 h 3276 3265',
14268 'STATE 6 # 3265 3354',
14269 'STATE 1 c 3276 3355',
14270 'STATE 1 u 3265 3272',
14271 'STATE 3 n 3321 3265',
14272 'STATE 2 a 3276 3356',
14273 'STATE 2 l 3276 3357',
14274 'STATE 5 r 3276 3265',
14275 'STATE 2 f 3276 3358',
14276 'STATE 3 i 3360 3359',
14277 'STATE 2 r 3276 3361',
14278 'STATE 2 r 3265 3276',
14279 'STATE 5 e 3362 3276',
14280 'STATE 1 # 3276 3265',
14281 'INDEX 3363 e',
14282 'STATE 6 0 3365 3364',
14283 'STATE 4 r 3367 3366',
14284 'STATE 4 # 3369 3368',
14285 'STATE 4 a 3371 3370',
14286 'STATE 5 r 3373 3372',
14287 'STATE 4 r 3375 3374',
14288 'STATE 3 e 3377 3376',
14289 'STATE 3 e 3379 3378',
14290 'STATE 5 r 3381 3380',
14291 'STATE 5 i 3383 3382',
14292 'STATE 3 b 3385 3384',
14293 'STATE 4 n 3387 3386',
14294 'STATE 3 e 3389 3388',
14295 'STATE 3 n 3391 3390',
14296 'STATE 2 r 3393 3392',
14297 'STATE 4 e 3395 3394',
14298 'STATE 2 r 3397 3396',
14299 'STATE 5 u 3399 3398',
14300 'STATE 3 w 3385 3400',
14301 'STATE 3 e 3389 3401',
14302 'STATE 6 n 3403 3402',
14303 'STATE 1 0 3405 3404',
14304 'PHONE eh1',
14305 'STATE 3 e 3407 3406',
14306 'STATE 3 e 3393 3408',
14307 'STATE 2 e 3409 3399',
14308 'PHONE ih1',
14309 'STATE 3 r 3411 3410',
14310 'STATE 2 o 3413 3412',
14311 'STATE 2 p 3393 3414',
14312 'PHONE iy1',
14313 'STATE 4 i 3416 3415',
14314 'STATE 3 r 3417 3399',
14315 'STATE 2 f 3418 3393',
14316 'STATE 1 # 3420 3419',
14317 'STATE 5 d 3422 3421',
14318 'PHONE epsilon',
14319 'STATE 3 b 3424 3423',
14320 'STATE 5 o 3426 3425',
14321 'STATE 6 a 3428 3427',
14322 'STATE 3 e 3389 3399',
14323 'STATE 3 h 3385 3429',
14324 'STATE 3 p 3399 3430',
14325 'STATE 4 l 3432 3431',
14326 'STATE 1 # 3393 3433',
14327 'STATE 3 m 3435 3434',
14328 'STATE 3 w 3437 3436',
14329 'STATE 3 k 3439 3438',
14330 'STATE 2 d 3441 3440',
14331 'STATE 2 i 3399 3442',
14332 'STATE 1 i 3444 3443',
14333 'STATE 2 n 3393 3445',
14334 'STATE 1 0 3447 3446',
14335 'STATE 5 r 3449 3448',
14336 'STATE 1 0 3451 3450',
14337 'STATE 1 # 3393 3452',
14338 'STATE 1 p 3453 3393',
14339 'STATE 5 a 3455 3454',
14340 'STATE 6 h 3457 3456',
14341 'STATE 3 h 3385 3458',
14342 'STATE 1 u 3444 3459',
14343 'STATE 6 d 3399 3385',
14344 'STATE 5 e 3461 3460',
14345 'STATE 1 0 3463 3462',
14346 'STATE 6 o 3465 3464',
14347 'STATE 3 l 3399 3466',
14348 'STATE 2 o 3399 3467',
14349 'STATE 6 a 3468 3385',
14350 'STATE 4 k 3470 3469',
14351 'STATE 3 i 3472 3471',
14352 'STATE 2 r 3393 3473',
14353 'STATE 2 g 3475 3474',
14354 'STATE 1 a 3455 3476',
14355 'STATE 3 y 3477 3399',
14356 'PHONE y-uw1',
14357 'STATE 2 n 3479 3478',
14358 'STATE 2 t 3444 3480',
14359 'STATE 2 b 3399 3481',
14360 'STATE 1 n 3399 3455',
14361 'STATE 2 a 3399 3482',
14362 'STATE 1 t 3399 3483',
14363 'PHONE iy',
14364 'STATE 1 d 3393 3484',
14365 'STATE 3 i 3486 3485',
14366 'STATE 3 r 3488 3487',
14367 'STATE 5 g 3490 3489',
14368 'STATE 6 a 3385 3491',
14369 'STATE 2 p 3492 3399',
14370 'STATE 6 a 3444 3493',
14371 'STATE 4 d 3444 3393',
14372 'STATE 4 m 3385 3494',
14373 'STATE 4 n 3389 3495',
14374 'PHONE ax',
14375 'STATE 1 0 3497 3496',
14376 'STATE 5 t 3498 3393',
14377 'STATE 3 t 3500 3499',
14378 'STATE 6 r 3393 3399',
14379 'STATE 5 a 3502 3501',
14380 'STATE 6 d 3399 3503',
14381 'STATE 6 # 3505 3504',
14382 'STATE 3 a 3385 3506',
14383 'STATE 6 e 3508 3507',
14384 'STATE 3 t 3389 3509',
14385 'STATE 2 a 3389 3510',
14386 'STATE 6 y 3385 3511',
14387 'STATE 3 s 3385 3512',
14388 'STATE 3 t 3514 3513',
14389 'STATE 1 # 3385 3515',
14390 'STATE 3 t 3517 3516',
14391 'STATE 1 # 3399 3518',
14392 'STATE 4 d 3393 3519',
14393 'STATE 3 i 3521 3520',
14394 'STATE 3 r 3522 3455',
14395 'STATE 2 l 3522 3523',
14396 'STATE 1 m 3399 3524',
14397 'STATE 3 h 3399 3525',
14398 'STATE 3 t 3526 3399',
14399 'STATE 2 z 3444 3527',
14400 'STATE 1 i 3529 3528',
14401 'STATE 2 e 3399 3530',
14402 'STATE 1 h 3399 3531',
14403 'STATE 2 s 3533 3532',
14404 'STATE 5 t 3535 3534',
14405 'STATE 5 t 3537 3536',
14406 'STATE 4 w 3539 3538',
14407 'STATE 4 v 3541 3540',
14408 'STATE 3 r 3543 3542',
14409 'STATE 6 h 3545 3544',
14410 'STATE 6 o 3385 3546',
14411 'STATE 5 m 3444 3399',
14412 'STATE 6 t 3444 3399',
14413 'PHONE ih',
14414 'STATE 6 # 3393 3547',
14415 'STATE 5 s 3549 3548',
14416 'STATE 3 r 3551 3550',
14417 'STATE 2 # 3385 3552',
14418 'STATE 3 d 3385 3553',
14419 'STATE 1 # 3385 3554',
14420 'STATE 5 u 3556 3555',
14421 'STATE 6 # 3558 3557',
14422 'STATE 1 0 3560 3559',
14423 'STATE 1 # 3546 3399',
14424 'STATE 3 i 3399 3385',
14425 'STATE 6 u 3399 3561',
14426 'STATE 3 d 3563 3562',
14427 'STATE 1 0 3385 3564',
14428 'STATE 1 i 3385 3565',
14429 'STATE 2 i 3389 3566',
14430 'STATE 1 m 3385 3567',
14431 'STATE 3 t 3399 3568',
14432 'STATE 4 t 3570 3569',
14433 'STATE 4 d 3455 3571',
14434 'STATE 3 t 3573 3572',
14435 'STATE 3 a 3399 3574',
14436 'STATE 2 s 3455 3575',
14437 'STATE 1 a 3576 3399',
14438 'STATE 1 s 3393 3577',
14439 'STATE 1 # 3578 3455',
14440 'STATE 2 t 3399 3579',
14441 'PHONE eh',
14442 'STATE 1 o 3455 3580',
14443 'PHONE ey1',
14444 'STATE 2 e 3582 3581',
14445 'STATE 1 a 3444 3583',
14446 'STATE 2 d 3444 3584',
14447 'STATE 1 d 3399 3585',
14448 'STATE 2 o 3444 3399',
14449 'STATE 2 y 3399 3586',
14450 'STATE 1 b 3399 3587',
14451 'STATE 1 e 3444 3588',
14452 'STATE 1 s 3444 3393',
14453 'STATE 5 s 3590 3589',
14454 'STATE 6 # 3592 3591',
14455 'STATE 4 n 3594 3593',
14456 'STATE 4 s 3596 3595',
14457 'STATE 4 u 3598 3597',
14458 'STATE 3 n 3600 3599',
14459 'STATE 4 u 3602 3601',
14460 'STATE 5 i 3604 3603',
14461 'STATE 3 v 3606 3605',
14462 'STATE 5 n 3608 3607',
14463 'STATE 6 n 3609 3399',
14464 'STATE 3 l 3399 3610',
14465 'STATE 3 h 3385 3399',
14466 'STATE 5 e 3611 3393',
14467 'STATE 5 b 3613 3612',
14468 'STATE 6 u 3385 3614',
14469 'STATE 3 h 3616 3615',
14470 'STATE 5 g 3618 3617',
14471 'STATE 3 h 3393 3385',
14472 'STATE 3 r 3620 3619',
14473 'STATE 1 m 3385 3621',
14474 'STATE 2 e 3623 3622',
14475 'STATE 1 0 3624 3399',
14476 'STATE 1 0 3626 3625',
14477 'STATE 3 i 3399 3627',
14478 'STATE 6 # 3629 3628',
14479 'STATE 6 g 3631 3630',
14480 'STATE 3 p 3399 3632',
14481 'STATE 6 z 3399 3633',
14482 'STATE 1 0 3634 3399',
14483 'STATE 2 x 3389 3399',
14484 'STATE 3 p 3389 3385',
14485 'STATE 2 m 3389 3635',
14486 'STATE 6 o 3637 3636',
14487 'STATE 3 f 3399 3385',
14488 'STATE 4 w 3639 3638',
14489 'STATE 3 k 3455 3640',
14490 'STATE 4 s 3642 3641',
14491 'STATE 3 c 3644 3643',
14492 'STATE 2 a 3522 3645',
14493 'STATE 3 u 3647 3646',
14494 'STATE 2 t 3455 3648',
14495 'STATE 2 n 3455 3399',
14496 'STATE 2 s 3393 3649',
14497 'STATE 3 o 3399 3650',
14498 'STATE 2 r 3455 3399',
14499 'STATE 2 r 3522 3651',
14500 'STATE 3 b 3399 3652',
14501 'STATE 3 s 3399 3653',
14502 'STATE 1 o 3444 3654',
14503 'STATE 2 m 3444 3399',
14504 'STATE 2 u 3399 3655',
14505 'STATE 1 e 3399 3656',
14506 'STATE 1 d 3399 3657',
14507 'STATE 1 u 3444 3658',
14508 'STATE 4 n 3660 3659',
14509 'STATE 6 # 3662 3661',
14510 'STATE 4 n 3664 3663',
14511 'STATE 4 n 3666 3665',
14512 'STATE 4 t 3668 3667',
14513 'STATE 5 c 3670 3669',
14514 'STATE 1 o 3672 3671',
14515 'STATE 6 # 3455 3399',
14516 'STATE 3 d 3674 3673',
14517 'STATE 3 d 3676 3675',
14518 'STATE 5 e 3678 3677',
14519 'PHONE uw1',
14520 'STATE 4 n 3680 3679',
14521 'STATE 6 i 3444 3681',
14522 'STATE 5 a 3444 3682',
14523 'STATE 6 e 3444 3683',
14524 'STATE 2 t 3493 3684',
14525 'STATE 5 t 3399 3685',
14526 'STATE 5 m 3686 3399',
14527 'STATE 1 0 3687 3399',
14528 'STATE 2 # 3524 3399',
14529 'STATE 3 h 3399 3688',
14530 'STATE 4 l 3455 3393',
14531 'STATE 2 b 3690 3689',
14532 'STATE 2 a 3399 3691',
14533 'STATE 6 a 3385 3692',
14534 'STATE 5 n 3694 3693',
14535 'STATE 6 t 3385 3695',
14536 'STATE 5 c 3444 3696',
14537 'STATE 6 a 3399 3393',
14538 'STATE 1 0 3697 3393',
14539 'STATE 1 0 3699 3698',
14540 'STATE 6 # 3385 3399',
14541 'STATE 6 # 3399 3700',
14542 'STATE 3 w 3600 3701',
14543 'STATE 6 p 3494 3702',
14544 'STATE 3 h 3703 3399',
14545 'STATE 2 # 3705 3704',
14546 'STATE 3 h 3399 3706',
14547 'STATE 3 h 3708 3707',
14548 'STATE 3 i 3710 3709',
14549 'STATE 6 c 3494 3711',
14550 'STATE 3 d 3444 3399',
14551 'STATE 3 s 3522 3712',
14552 'STATE 3 i 3399 3713',
14553 'STATE 6 v 3399 3714',
14554 'STATE 1 0 3385 3389',
14555 'STATE 1 a 3399 3715',
14556 'STATE 2 n 3385 3399',
14557 'STATE 4 s 3717 3716',
14558 'STATE 2 v 3437 3718',
14559 'STATE 3 u 3720 3719',
14560 'STATE 4 e 3399 3721',
14561 'STATE 2 n 3722 3399',
14562 'STATE 3 z 3522 3723',
14563 'STATE 2 i 3522 3724',
14564 'STATE 1 o 3522 3725',
14565 'STATE 1 e 3455 3726',
14566 'STATE 1 # 3399 3455',
14567 'STATE 2 r 3728 3727',
14568 'STATE 2 l 3393 3729',
14569 'STATE 2 o 3455 3730',
14570 'STATE 1 e 3522 3731',
14571 'STATE 2 b 3399 3732',
14572 'STATE 3 w 3600 3399',
14573 'STATE 1 e 3444 3399',
14574 'STATE 1 t 3399 3733',
14575 'STATE 1 y 3399 3734',
14576 'STATE 1 e 3399 3735',
14577 'STATE 2 f 3444 3736',
14578 'STATE 4 l 3738 3737',
14579 'STATE 5 e 3740 3739',
14580 'STATE 6 i 3385 3741',
14581 'STATE 4 y 3399 3742',
14582 'STATE 4 s 3744 3743',
14583 'STATE 6 s 3746 3745',
14584 'STATE 4 t 3748 3747',
14585 'STATE 1 # 3385 3749',
14586 'STATE 5 l 3751 3750',
14587 'STATE 1 # 3753 3752',
14588 'STATE 1 f 3385 3754',
14589 'STATE 1 e 3455 3755',
14590 'STATE 4 n 3757 3756',
14591 'STATE 6 a 3455 3385',
14592 'STATE 4 x 3759 3758',
14593 'STATE 4 m 3761 3760',
14594 'STATE 3 t 3762 3399',
14595 'STATE 5 t 3762 3399',
14596 'STATE 3 b 3455 3763',
14597 'STATE 6 l 3764 3399',
14598 'STATE 4 y 3524 3765',
14599 'STATE 6 w 3455 3766',
14600 'STATE 5 s 3399 3762',
14601 'STATE 6 l 3385 3767',
14602 'STATE 6 v 3494 3444',
14603 'STATE 3 d 3399 3768',
14604 'STATE 6 l 3399 3524',
14605 'STATE 6 b 3393 3399',
14606 'STATE 6 t 3444 3769',
14607 'STATE 2 0 3524 3770',
14608 'STATE 5 m 3393 3771',
14609 'STATE 3 r 3399 3393',
14610 'STATE 3 g 3399 3772',
14611 'STATE 2 b 3385 3773',
14612 'STATE 5 t 3393 3774',
14613 'STATE 6 d 3444 3393',
14614 'STATE 5 v 3385 3393',
14615 'STATE 5 l 3776 3775',
14616 'STATE 3 b 3393 3777',
14617 'STATE 2 b 3385 3778',
14618 'STATE 6 i 3385 3393',
14619 'STATE 3 z 3780 3779',
14620 'STATE 3 u 3762 3399',
14621 'STATE 3 p 3399 3385',
14622 'STATE 6 p 3385 3781',
14623 'STATE 6 s 3494 3522',
14624 'STATE 3 d 3494 3782',
14625 'STATE 2 e 3399 3385',
14626 'STATE 6 o 3385 3783',
14627 'STATE 1 # 3785 3784',
14628 'STATE 2 w 3385 3786',
14629 'STATE 2 r 3399 3522',
14630 'STATE 3 p 3399 3787',
14631 'STATE 3 v 3399 3788',
14632 'STATE 1 a 3790 3789',
14633 'STATE 6 s 3399 3385',
14634 'STATE 1 # 3792 3791',
14635 'STATE 3 d 3794 3793',
14636 'STATE 3 s 3455 3795',
14637 'STATE 1 # 3600 3796',
14638 'STATE 3 l 3455 3797',
14639 'STATE 2 q 3524 3399',
14640 'STATE 4 y 3399 3798',
14641 'STATE 1 e 3522 3799',
14642 'STATE 3 s 3522 3800',
14643 'STATE 2 e 3522 3801',
14644 'STATE 2 i 3522 3385',
14645 'STATE 1 i 3455 3802',
14646 'STATE 2 h 3455 3385',
14647 'STATE 1 e 3455 3385',
14648 'STATE 4 s 3803 3393',
14649 'STATE 3 r 3385 3455',
14650 'STATE 2 s 3522 3804',
14651 'STATE 3 j 3399 3805',
14652 'STATE 1 s 3806 3399',
14653 'STATE 2 u 3399 3807',
14654 'STATE 1 m 3399 3808',
14655 'STATE 1 n 3444 3809',
14656 'STATE 4 w 3811 3810',
14657 'STATE 5 y 3813 3812',
14658 'STATE 5 d 3815 3814',
14659 'STATE 6 # 3817 3816',
14660 'STATE 1 # 3819 3818',
14661 'STATE 4 w 3600 3820',
14662 'STATE 4 u 3822 3821',
14663 'STATE 6 o 3824 3823',
14664 'STATE 6 l 3455 3825',
14665 'STATE 3 m 3455 3826',
14666 'STATE 4 s 3828 3827',
14667 'STATE 3 u 3399 3829',
14668 'STATE 3 m 3455 3830',
14669 'STATE 4 w 3832 3831',
14670 'STATE 6 o 3385 3833',
14671 'STATE 2 p 3399 3834',
14672 'STATE 2 d 3835 3399',
14673 'STATE 5 n 3385 3836',
14674 'STATE 6 e 3455 3399',
14675 'STATE 4 t 3837 3399',
14676 'STATE 6 i 3455 3838',
14677 'STATE 4 y 3840 3839',
14678 'STATE 2 # 3385 3841',
14679 'STATE 4 l 3843 3842',
14680 'STATE 6 g 3385 3844',
14681 'PHONE oy1',
14682 'STATE 3 d 3600 3845',
14683 'STATE 3 j 3600 3385',
14684 'STATE 5 a 3847 3846',
14685 'STATE 5 a 3455 3848',
14686 'STATE 5 e 3494 3849',
14687 'STATE 5 j 3524 3850',
14688 'STATE 6 v 3393 3851',
14689 'STATE 3 r 3852 3524',
14690 'STATE 3 w 3854 3853',
14691 'STATE 3 c 3399 3855',
14692 'STATE 6 # 3856 3393',
14693 'STATE 6 u 3858 3857',
14694 'STATE 6 a 3444 3393',
14695 'STATE 6 i 3393 3859',
14696 'STATE 6 o 3385 3860',
14697 'STATE 2 t 3385 3861',
14698 'STATE 3 a 3385 3862',
14699 'STATE 1 0 3389 3399',
14700 'STATE 1 # 3385 3399',
14701 'STATE 6 r 3399 3863',
14702 'STATE 3 r 3393 3864',
14703 'STATE 2 t 3399 3389',
14704 'STATE 2 t 3385 3522',
14705 'STATE 1 l 3399 3389',
14706 'STATE 6 # 3389 3865',
14707 'STATE 3 z 3389 3866',
14708 'STATE 6 d 3399 3867',
14709 'STATE 2 r 3385 3399',
14710 'STATE 2 n 3399 3868',
14711 'STATE 2 s 3385 3399',
14712 'STATE 4 d 3870 3869',
14713 'STATE 4 d 3455 3871',
14714 'STATE 3 c 3455 3872',
14715 'STATE 3 h 3874 3873',
14716 'STATE 3 i 3876 3875',
14717 'STATE 4 m 3455 3877',
14718 'STATE 1 a 3399 3522',
14719 'STATE 3 l 3879 3878',
14720 'STATE 2 a 3522 3880',
14721 'STATE 2 p 3455 3881',
14722 'STATE 2 n 3393 3882',
14723 'STATE 2 h 3522 3883',
14724 'STATE 3 i 3399 3884',
14725 'STATE 2 a 3444 3399',
14726 'STATE 2 r 3399 3885',
14727 'STATE 1 o 3399 3886',
14728 'STATE 1 a 3444 3887',
14729 'STATE 4 o 3889 3888',
14730 'STATE 1 # 3891 3890',
14731 'STATE 5 l 3893 3892',
14732 'STATE 6 # 3399 3455',
14733 'STATE 5 b 3455 3894',
14734 'STATE 6 o 3896 3895',
14735 'STATE 6 s 3399 3897',
14736 'STATE 2 y 3393 3898',
14737 'STATE 4 w 3900 3899',
14738 'STATE 4 s 3902 3901',
14739 'STATE 1 # 3904 3903',
14740 'STATE 4 o 3444 3905',
14741 'STATE 3 r 3762 3399',
14742 'STATE 3 n 3455 3906',
14743 'STATE 2 i 3399 3907',
14744 'STATE 6 h 3730 3908',
14745 'STATE 1 r 3385 3909',
14746 'STATE 4 c 3385 3910',
14747 'STATE 1 # 3385 3911',
14748 'STATE 1 # 3385 3912',
14749 'STATE 3 s 3914 3913',
14750 'STATE 1 a 3576 3915',
14751 'STATE 5 s 3917 3916',
14752 'STATE 4 l 3790 3399',
14753 'STATE 1 o 3455 3918',
14754 'STATE 5 z 3399 3919',
14755 'STATE 1 a 3920 3399',
14756 'STATE 6 # 3399 3385',
14757 'STATE 1 e 3455 3921',
14758 'STATE 2 # 3923 3922',
14759 'STATE 5 e 3399 3924',
14760 'STATE 5 a 3494 3925',
14761 'STATE 4 v 3927 3926',
14762 'STATE 5 i 3929 3928',
14763 'STATE 5 i 3931 3930',
14764 'STATE 3 l 3933 3932',
14765 'STATE 4 j 3494 3934',
14766 'STATE 6 l 3936 3935',
14767 'STATE 5 e 3393 3937',
14768 'STATE 5 o 3494 3385',
14769 'STATE 6 o 3399 3938',
14770 'STATE 6 f 3393 3939',
14771 'STATE 2 f 3524 3399',
14772 'STATE 6 i 3941 3940',
14773 'STATE 5 t 3385 3393',
14774 'STATE 6 l 3393 3399',
14775 'STATE 1 # 3393 3444',
14776 'STATE 6 o 3943 3942',
14777 'STATE 5 s 3385 3393',
14778 'STATE 6 l 3444 3393',
14779 'STATE 3 l 3944 3393',
14780 'STATE 1 s 3385 3945',
14781 'STATE 1 l 3947 3946',
14782 'STATE 3 p 3399 3948',
14783 'STATE 1 # 3399 3949',
14784 'STATE 3 j 3385 3950',
14785 'STATE 2 # 3568 3494',
14786 'STATE 6 s 3952 3951',
14787 'STATE 1 d 3399 3953',
14788 'STATE 4 y 3955 3954',
14789 'STATE 3 w 3957 3956',
14790 'STATE 4 z 3522 3958',
14791 'STATE 3 g 3455 3959',
14792 'STATE 3 r 3961 3960',
14793 'PHONE y-uw',
14794 'STATE 2 o 3963 3962',
14795 'STATE 2 l 3399 3455',
14796 'STATE 2 t 3399 3964',
14797 'STATE 1 z 3522 3965',
14798 'STATE 2 a 3522 3966',
14799 'STATE 2 u 3522 3385',
14800 'STATE 3 p 3968 3967',
14801 'STATE 2 t 3393 3444',
14802 'STATE 1 w 3522 3969',
14803 'STATE 2 i 3399 3970',
14804 'STATE 2 n 3399 3971',
14805 'STATE 1 r 3399 3972',
14806 'STATE 2 b 3533 3973',
14807 'STATE 6 # 3975 3974',
14808 'STATE 3 g 3399 3976',
14809 'STATE 6 # 3600 3977',
14810 'STATE 5 e 3979 3978',
14811 'STATE 5 d 3981 3980',
14812 'STATE 6 # 3983 3982',
14813 'STATE 6 # 3985 3984',
14814 'STATE 3 t 3385 3986',
14815 'STATE 3 u 3385 3987',
14816 'STATE 6 d 3455 3988',
14817 'STATE 2 l 3393 3989',
14818 'STATE 4 s 3991 3990',
14819 'STATE 2 s 3385 3992',
14820 'STATE 3 o 3399 3993',
14821 'STATE 3 r 3385 3994',
14822 'STATE 3 n 3455 3995',
14823 'STATE 4 n 3455 3996',
14824 'STATE 3 o 3399 3997',
14825 'STATE 2 n 3385 3998',
14826 'STATE 3 l 3399 3999',
14827 'STATE 1 # 3385 4000',
14828 'STATE 3 c 3455 4001',
14829 'STATE 1 # 3385 4002',
14830 'STATE 3 u 3385 4003',
14831 'STATE 3 g 4005 4004',
14832 'STATE 3 v 3385 4006',
14833 'STATE 1 r 3385 3455',
14834 'STATE 5 c 3385 3399',
14835 'STATE 2 v 4007 3399',
14836 'STATE 2 n 3385 3437',
14837 'STATE 2 t 3455 4008',
14838 'STATE 5 e 3399 3455',
14839 'STATE 5 a 3455 3399',
14840 'STATE 2 t 3399 4009',
14841 'STATE 4 n 4011 4010',
14842 'STATE 4 o 4013 4012',
14843 'STATE 3 k 4015 4014',
14844 'STATE 5 i 4017 4016',
14845 'STATE 4 c 4019 4018',
14846 'STATE 6 a 3393 4020',
14847 'STATE 5 u 4022 4021',
14848 'STATE 6 c 3385 4023',
14849 'STATE 6 r 4025 4024',
14850 'STATE 6 l 3444 3385',
14851 'STATE 3 s 3600 4026',
14852 'STATE 5 a 4027 3600',
14853 'STATE 5 e 4029 4028',
14854 'STATE 6 i 3455 4030',
14855 'STATE 4 c 3494 4031',
14856 'STATE 6 i 3522 4032',
14857 'STATE 6 u 3399 4033',
14858 'STATE 6 s 3393 4034',
14859 'STATE 6 t 4036 4035',
14860 'STATE 2 c 3444 4037',
14861 'STATE 5 f 4039 4038',
14862 'STATE 5 l 3385 3393',
14863 'STATE 6 e 3393 3385',
14864 'STATE 2 d 3385 4040',
14865 'STATE 5 y 4042 4041',
14866 'STATE 5 t 4043 3399',
14867 'STATE 6 l 4045 4044',
14868 'STATE 6 r 3399 4046',
14869 'STATE 6 a 3399 4047',
14870 'STATE 2 p 3385 4048',
14871 'STATE 1 0 3385 3399',
14872 'STATE 3 f 3399 4049',
14873 'STATE 4 e 3399 4050',
14874 'STATE 3 k 4052 4051',
14875 'STATE 1 # 3399 4053',
14876 'STATE 2 e 3600 3399',
14877 'STATE 4 a 3444 4054',
14878 'STATE 3 h 4056 4055',
14879 'STATE 1 e 3600 4027',
14880 'STATE 2 b 4027 3600',
14881 'STATE 2 c 4058 4057',
14882 'STATE 3 n 3522 3455',
14883 'STATE 2 s 4060 4059',
14884 'STATE 1 p 3494 4061',
14885 'STATE 2 o 3522 3494',
14886 'STATE 3 g 3455 4062',
14887 'STATE 2 a 3455 4063',
14888 'STATE 1 r 3455 4064',
14889 'STATE 1 a 3399 4065',
14890 'STATE 1 o 3399 4066',
14891 'STATE 1 c 3444 4067',
14892 'STATE 1 i 3444 4068',
14893 'STATE 1 # 4070 4069',
14894 'STATE 5 e 4072 4071',
14895 'STATE 1 # 4074 4073',
14896 'STATE 2 c 3600 4075',
14897 'STATE 3 r 3600 4076',
14898 'STATE 6 l 3600 3399',
14899 'STATE 6 # 4078 4077',
14900 'STATE 3 f 4080 4079',
14901 'STATE 3 o 3399 4081',
14902 'STATE 3 w 4083 4082',
14903 'STATE 1 # 4085 4084',
14904 'STATE 5 y 3455 4086',
14905 'STATE 2 l 4088 4087',
14906 'STATE 3 l 3385 3455',
14907 'STATE 3 g 4090 4089',
14908 'STATE 2 i 3393 4091',
14909 'STATE 6 k 3385 4092',
14910 'STATE 6 l 4094 4093',
14911 'STATE 3 l 3385 4095',
14912 'STATE 4 u 3399 4096',
14913 'STATE 6 a 3522 4097',
14914 'STATE 4 n 3455 4098',
14915 'STATE 3 r 3385 4099',
14916 'STATE 3 u 4101 4100',
14917 'STATE 1 # 4103 4102',
14918 'STATE 2 o 3399 4104',
14919 'STATE 2 i 3385 4105',
14920 'STATE 1 i 3385 3455',
14921 'STATE 4 d 3522 4106',
14922 'STATE 1 d 3385 4107',
14923 'STATE 3 k 4109 4108',
14924 'STATE 2 d 3455 4110',
14925 'STATE 3 r 3455 4111',
14926 'STATE 5 e 3399 3437',
14927 'STATE 1 q 3455 4112',
14928 'STATE 2 c 4113 3596',
14929 'STATE 6 c 4115 4114',
14930 'STATE 5 g 4117 4116',
14931 'STATE 5 t 4119 4118',
14932 'STATE 5 r 3399 4120',
14933 'STATE 5 r 3385 3524',
14934 'STATE 6 e 3524 3393',
14935 'STATE 6 c 3385 4121',
14936 'STATE 6 s 3494 3385',
14937 'STATE 4 g 4123 4122',
14938 'STATE 5 e 3455 4124',
14939 'STATE 6 r 3385 4125',
14940 'STATE 6 o 4127 4126',
14941 'STATE 6 c 3522 3455',
14942 'STATE 6 s 3393 3455',
14943 'STATE 5 e 3389 4128',
14944 'STATE 5 e 3444 4129',
14945 'STATE 3 j 3600 3437',
14946 'PHONE uw',
14947 'STATE 4 c 4131 4130',
14948 'STATE 6 r 4133 4132',
14949 'STATE 6 r 4135 4134',
14950 'STATE 4 g 3494 3455',
14951 'STATE 6 u 3389 3385',
14952 'STATE 3 s 4136 3399',
14953 'STATE 6 c 3444 3399',
14954 'STATE 1 t 3385 4137',
14955 'STATE 3 r 3444 4138',
14956 'STATE 3 d 3393 4139',
14957 'STATE 3 l 3393 4140',
14958 'STATE 3 l 3393 3385',
14959 'STATE 1 t 3385 3393',
14960 'STATE 1 0 4142 4141',
14961 'STATE 6 l 3385 3399',
14962 'STATE 6 y 3399 4143',
14963 'STATE 6 t 3385 4144',
14964 'STATE 3 g 3522 3385',
14965 'STATE 2 r 3389 3399',
14966 'STATE 6 s 4146 4145',
14967 'STATE 6 # 3385 4147',
14968 'STATE 6 e 3399 3385',
14969 'STATE 4 a 4149 4148',
14970 'STATE 3 v 4151 4150',
14971 'STATE 2 c 3399 4152',
14972 'STATE 3 m 3399 4153',
14973 'STATE 4 o 3444 4154',
14974 'STATE 3 z 3455 4155',
14975 'STATE 2 t 3399 3455',
14976 'STATE 3 p 3455 4156',
14977 'STATE 1 o 3524 3455',
14978 'STATE 2 a 3385 4157',
14979 'STATE 4 p 3385 3522',
14980 'STATE 3 r 4159 4158',
14981 'STATE 3 h 3455 4160',
14982 'STATE 1 a 3455 3385',
14983 'STATE 1 i 3522 3455',
14984 'STATE 3 a 3399 4161',
14985 'STATE 2 g 3399 3444',
14986 'STATE 1 z 3444 4162',
14987 'STATE 1 r 3882 4163',
14988 'STATE 5 i 4165 4164',
14989 'STATE 3 o 3399 4166',
14990 'STATE 4 u 4168 4167',
14991 'STATE 4 k 3494 4169',
14992 'STATE 6 l 3393 4170',
14993 'STATE 3 d 3444 4171',
14994 'STATE 6 c 3399 4172',
14995 'STATE 2 s 3600 4173',
14996 'STATE 2 n 4175 4174',
14997 'STATE 3 a 3399 4176',
14998 'STATE 3 h 3385 4177',
14999 'STATE 6 t 3522 4178',
15000 'STATE 3 u 4049 4179',
15001 'STATE 1 # 3385 4180',
15002 'STATE 2 o 3522 4181',
15003 'STATE 5 c 4183 4182',
15004 'STATE 3 u 4185 4184',
15005 'STATE 5 a 4187 4186',
15006 'STATE 1 l 3455 4188',
15007 'STATE 1 a 3385 3522',
15008 'STATE 1 # 4190 4189',
15009 'STATE 6 r 3385 3455',
15010 'STATE 3 c 3393 4191',
15011 'STATE 6 e 4193 4192',
15012 'STATE 3 n 3455 4194',
15013 'STATE 3 l 3455 3399',
15014 'STATE 3 j 3385 4195',
15015 'STATE 3 u 3399 4196',
15016 'STATE 6 n 3399 3385',
15017 'STATE 3 l 3455 4197',
15018 'STATE 2 s 3385 4198',
15019 'STATE 4 l 4200 4199',
15020 'STATE 2 q 3385 4201',
15021 'STATE 6 a 4203 4202',
15022 'STATE 2 p 3385 4204',
15023 'STATE 3 r 3385 4205',
15024 'STATE 1 d 3385 4206',
15025 'STATE 1 o 3522 4207',
15026 'STATE 3 w 3385 4208',
15027 'STATE 3 v 3455 4209',
15028 'STATE 1 o 3455 3522',
15029 'STATE 2 g 3522 3455',
15030 'STATE 3 g 3455 4210',
15031 'STATE 6 r 3455 4211',
15032 'STATE 1 s 3455 3399',
15033 'STATE 4 m 4213 4212',
15034 'STATE 4 l 3455 4214',
15035 'STATE 6 e 4216 4215',
15036 'STATE 6 l 3389 4217',
15037 'STATE 6 # 4219 4218',
15038 'STATE 3 o 3399 4220',
15039 'STATE 3 l 4222 4221',
15040 'STATE 6 m 3494 4223',
15041 'STATE 5 p 4225 4224',
15042 'STATE 6 o 3385 3494',
15043 'STATE 5 i 4227 4226',
15044 'STATE 6 n 3385 4228',
15045 'STATE 6 y 3455 4229',
15046 'STATE 5 m 3522 3385',
15047 'STATE 5 a 3389 4230',
15048 'STATE 5 a 3385 3389',
15049 'STATE 4 g 4232 4231',
15050 'STATE 5 u 3494 4233',
15051 'STATE 4 s 4235 4234',
15052 'STATE 4 f 3385 4236',
15053 'STATE 4 m 3393 4237',
15054 'STATE 4 m 3444 3455',
15055 'STATE 5 n 3524 3399',
15056 'STATE 1 l 4239 4238',
15057 'STATE 5 n 3399 3385',
15058 'STATE 3 p 3393 4240',
15059 'STATE 6 a 3393 4241',
15060 'STATE 5 t 4243 4242',
15061 'STATE 5 d 4245 4244',
15062 'STATE 6 i 3399 3385',
15063 'STATE 3 s 3399 4246',
15064 'STATE 3 d 3385 4247',
15065 'STATE 3 t 3399 3385',
15066 'STATE 3 t 3792 4248',
15067 'STATE 4 o 3444 4249',
15068 'STATE 3 y 3399 4250',
15069 'STATE 1 # 4251 3399',
15070 'STATE 1 u 3524 3399',
15071 'STATE 1 a 4252 3399',
15072 'STATE 3 y 3399 4253',
15073 'STATE 4 e 3399 4254',
15074 'STATE 3 x 3455 4255',
15075 'STATE 3 g 3455 4256',
15076 'STATE 4 c 3385 4257',
15077 'STATE 1 b 3522 4258',
15078 'STATE 2 o 3494 3522',
15079 'STATE 1 u 3455 4259',
15080 'STATE 3 l 4260 3399',
15081 'STATE 1 s 3444 4261',
15082 'STATE 1 t 3393 4262',
15083 'STATE 4 y 3399 4263',
15084 'STATE 6 a 4265 4264',
15085 'STATE 2 p 4267 4266',
15086 'STATE 4 c 4269 4268',
15087 'STATE 5 m 3393 4270',
15088 'STATE 3 o 3399 4271',
15089 'STATE 3 k 3399 4272',
15090 'STATE 5 r 3393 4273',
15091 'STATE 6 l 4274 3399',
15092 'STATE 3 l 3600 3399',
15093 'STATE 6 s 4276 4275',
15094 'STATE 6 a 3455 4277',
15095 'STATE 3 u 3399 4278',
15096 'STATE 6 # 3522 4279',
15097 'STATE 1 r 3522 3385',
15098 'STATE 2 n 4281 4280',
15099 'STATE 3 b 4283 4282',
15100 'STATE 2 e 3522 3385',
15101 'STATE 3 o 4285 4284',
15102 'STATE 6 e 4287 4286',
15103 'STATE 3 o 3399 4288',
15104 'STATE 2 q 3385 3399',
15105 'STATE 5 o 3385 4289',
15106 'STATE 2 e 3385 4290',
15107 'STATE 1 b 3522 4291',
15108 'STATE 3 m 3385 4292',
15109 'STATE 6 l 3385 4293',
15110 'STATE 1 o 3393 4294',
15111 'STATE 4 n 4296 4295',
15112 'STATE 4 n 4298 4297',
15113 'STATE 6 n 3455 4299',
15114 'STATE 3 z 3385 3600',
15115 'STATE 2 s 3385 4300',
15116 'STATE 4 s 4302 4301',
15117 'STATE 4 s 3385 3455',
15118 'STATE 6 i 3385 4303',
15119 'STATE 3 f 3522 4304',
15120 'STATE 2 h 3399 4305',
15121 'STATE 1 d 3385 4306',
15122 'STATE 2 o 3399 4307',
15123 'STATE 2 c 3385 4308',
15124 'STATE 1 a 3385 3399',
15125 'STATE 6 r 4310 4309',
15126 'STATE 4 l 4311 3385',
15127 'STATE 3 v 3455 4312',
15128 'STATE 3 m 3389 4313',
15129 'STATE 2 r 3385 4314',
15130 'STATE 5 a 3399 3579',
15131 'STATE 4 q 4316 4315',
15132 'STATE 5 b 4318 4317',
15133 'STATE 4 v 3494 4319',
15134 'STATE 5 e 3385 4320',
15135 'STATE 5 t 3385 4321',
15136 'STATE 6 r 3455 4322',
15137 'STATE 5 u 4324 4323',
15138 'STATE 5 e 3393 4325',
15139 'STATE 6 a 4327 4326',
15140 'STATE 5 l 3444 4328',
15141 'STATE 6 e 3522 4329',
15142 'STATE 6 l 3494 4330',
15143 'STATE 4 p 4332 4331',
15144 'STATE 6 e 3385 3389',
15145 'STATE 6 m 3393 4333',
15146 'STATE 6 m 3385 3455',
15147 'STATE 5 e 3494 4334',
15148 'STATE 6 t 3455 4335',
15149 'STATE 5 o 4336 3385',
15150 'STATE 4 q 4338 4337',
15151 'STATE 5 r 3494 4339',
15152 'STATE 5 i 3455 4340',
15153 'STATE 4 c 3455 4341',
15154 'STATE 6 n 3455 4342',
15155 'STATE 4 s 3385 4343',
15156 'STATE 4 l 4345 4344',
15157 'STATE 3 c 4347 4346',
15158 'STATE 3 n 3444 3393',
15159 'STATE 2 t 3393 4348',
15160 'STATE 6 t 3943 3393',
15161 'STATE 2 a 4349 3399',
15162 'STATE 3 b 4350 3399',
15163 'STATE 3 p 3399 4351',
15164 'STATE 6 a 3385 3399',
15165 'STATE 3 c 3399 4352',
15166 'STATE 3 s 3385 4353',
15167 'STATE 6 l 4355 4354',
15168 'STATE 3 i 3399 4356',
15169 'STATE 1 a 3444 4357',
15170 'STATE 3 r 3524 3399',
15171 'STATE 2 n 3393 3399',
15172 'STATE 3 f 3399 4358',
15173 'STATE 4 y 3399 4359',
15174 'STATE 3 i 3399 4360',
15175 'STATE 3 c 3455 4361',
15176 'STATE 4 x 3385 4362',
15177 'STATE 3 p 3494 4363',
15178 'STATE 1 a 4365 4364',
15179 'STATE 2 a 4366 3399',
15180 'STATE 1 n 3444 4367',
15181 'STATE 1 l 3444 4368',
15182 'STATE 6 n 4370 4369',
15183 'STATE 6 c 4372 4371',
15184 'STATE 2 s 3385 4373',
15185 'STATE 3 u 4375 4374',
15186 'STATE 4 u 3399 4376',
15187 'STATE 5 h 4378 4377',
15188 'STATE 5 k 4379 3385',
15189 'STATE 5 x 4380 3399',
15190 'STATE 4 s 4382 4381',
15191 'STATE 5 l 3444 4383',
15192 'STATE 5 d 3393 4384',
15193 'STATE 3 n 3455 3399',
15194 'STATE 5 i 4386 4385',
15195 'STATE 5 e 3399 4387',
15196 'STATE 3 g 4389 4388',
15197 'STATE 5 e 4391 4390',
15198 'STATE 6 e 3385 3455',
15199 'STATE 6 e 4393 4392',
15200 'STATE 6 e 3455 4394',
15201 'STATE 2 r 4396 4395',
15202 'STATE 1 a 3522 3385',
15203 'STATE 5 z 4398 4397',
15204 'STATE 1 b 3393 3399',
15205 'STATE 6 y 3455 4399',
15206 'STATE 1 o 3385 3455',
15207 'STATE 2 e 3455 4400',
15208 'STATE 1 # 3385 4401',
15209 'STATE 3 l 3524 4402',
15210 'STATE 2 e 3385 4403',
15211 'STATE 1 e 3455 4404',
15212 'STATE 3 h 3522 3459',
15213 'STATE 1 a 3393 4405',
15214 'STATE 4 l 3455 4406',
15215 'STATE 1 i 4408 4407',
15216 'STATE 4 l 3455 3385',
15217 'STATE 1 l 3455 4409',
15218 'STATE 1 n 3455 4410',
15219 'STATE 4 t 3385 4411',
15220 'STATE 4 u 3444 4412',
15221 'STATE 3 s 3385 4413',
15222 'STATE 2 d 3385 4414',
15223 'STATE 6 i 3455 3385',
15224 'STATE 6 e 3385 3399',
15225 'STATE 2 i 3399 4415',
15226 'STATE 2 i 3522 4359',
15227 'STATE 2 q 3385 4416',
15228 'STATE 2 n 4418 4417',
15229 'STATE 3 c 4419 3455',
15230 'STATE 3 f 3385 3522',
15231 'STATE 3 r 4421 4420',
15232 'STATE 2 b 3522 4422',
15233 'STATE 2 n 4424 4423',
15234 'STATE 4 v 4426 4425',
15235 'STATE 6 a 3393 3494',
15236 'STATE 5 a 4428 4427',
15237 'STATE 6 l 3385 3522',
15238 'STATE 4 d 3385 4429',
15239 'STATE 5 u 3455 4430',
15240 'STATE 5 d 3522 4431',
15241 'STATE 6 a 3522 3385',
15242 'STATE 5 i 4433 4432',
15243 'STATE 4 g 4435 4434',
15244 'STATE 5 a 4437 4436',
15245 'STATE 3 b 3385 4438',
15246 'STATE 3 t 3385 4439',
15247 'STATE 6 a 3385 3393',
15248 'STATE 6 o 3393 4440',
15249 'STATE 5 p 4442 4441',
15250 'STATE 4 f 3455 4443',
15251 'STATE 5 r 4445 4444',
15252 'STATE 5 h 3385 4446',
15253 'STATE 6 l 4448 4447',
15254 'STATE 6 r 4450 4449',
15255 'STATE 6 n 3385 3389',
15256 'STATE 4 f 4452 4451',
15257 'STATE 6 i 3385 3494',
15258 'STATE 6 o 3393 3385',
15259 'STATE 6 n 3444 4453',
15260 'STATE 6 a 4455 4454',
15261 'STATE 6 m 3455 3444',
15262 'STATE 4 p 3385 3444',
15263 'STATE 6 # 3393 4456',
15264 'STATE 6 t 3385 3455',
15265 'STATE 3 h 3393 4457',
15266 'STATE 1 # 3399 3393',
15267 'STATE 5 l 3393 4458',
15268 'STATE 1 c 3399 4459',
15269 'STATE 6 a 3385 4460',
15270 'STATE 6 a 4461 3399',
15271 'STATE 3 g 3399 4097',
15272 'STATE 3 c 3385 4462',
15273 'STATE 3 p 4464 4463',
15274 'STATE 3 p 3385 3399',
15275 'STATE 4 i 3524 4465',
15276 'STATE 2 d 3444 4466',
15277 'STATE 3 b 4464 4467',
15278 'STATE 2 a 3385 3455',
15279 'STATE 2 e 3653 4468',
15280 'STATE 1 b 3455 4469',
15281 'STATE 4 z 3522 3385',
15282 'STATE 1 h 3494 4470',
15283 'STATE 1 # 4359 4471',
15284 'STATE 3 c 3385 3455',
15285 'STATE 1 d 3399 4472',
15286 'STATE 1 p 3444 3399',
15287 'STATE 1 y 3444 4473',
15288 'STATE 5 k 4475 4474',
15289 'STATE 4 m 4477 4476',
15290 'STATE 6 o 4479 4478',
15291 'STATE 4 t 3385 4480',
15292 'STATE 2 e 4481 3393',
15293 'STATE 4 u 3399 4482',
15294 'STATE 2 q 4483 3399',
15295 'STATE 4 v 4485 4484',
15296 'STATE 5 y 4487 4486',
15297 'STATE 4 s 3385 4488',
15298 'STATE 3 b 4490 4489',
15299 'PHONE ow1',
15300 'STATE 4 t 4492 4491',
15301 'STATE 2 a 4494 4493',
15302 'STATE 5 w 3399 4495',
15303 'STATE 2 c 3393 3882',
15304 'STATE 6 n 4497 4496',
15305 'STATE 6 a 4499 4498',
15306 'STATE 3 h 3385 4500',
15307 'STATE 5 e 3455 4501',
15308 'STATE 6 c 3385 4502',
15309 'STATE 5 a 4503 3385',
15310 'STATE 2 e 3455 4504',
15311 'STATE 2 s 4506 4505',
15312 'STATE 3 c 3455 4507',
15313 'STATE 6 y 3455 4508',
15314 'STATE 2 a 4510 4509',
15315 'STATE 3 d 3385 4511',
15316 'STATE 5 i 4513 4512',
15317 'STATE 6 o 3385 4514',
15318 'STATE 2 e 3455 4515',
15319 'STATE 3 c 3455 4516',
15320 'STATE 5 z 3522 3385',
15321 'STATE 3 r 3385 4517',
15322 'STATE 3 s 3455 4518',
15323 'STATE 1 a 3455 4519',
15324 'STATE 2 a 3393 4520',
15325 'STATE 6 o 3455 3399',
15326 'STATE 6 u 3385 3455',
15327 'STATE 2 s 3385 3455',
15328 'STATE 2 n 3385 4521',
15329 'STATE 2 t 4523 4522',
15330 'STATE 3 r 3385 4297',
15331 'STATE 3 k 3455 4524',
15332 'STATE 3 c 3385 4525',
15333 'STATE 1 v 4527 4526',
15334 'STATE 3 v 4529 4528',
15335 'STATE 3 r 3385 3399',
15336 'STATE 2 t 3385 4530',
15337 'STATE 6 o 3455 3385',
15338 'STATE 1 o 3455 3385',
15339 'STATE 3 f 3385 3455',
15340 'STATE 1 e 3389 4531',
15341 'STATE 3 r 3522 4532',
15342 'STATE 1 a 3455 4533',
15343 'STATE 3 t 3385 3455',
15344 'STATE 4 c 4535 4534',
15345 'STATE 6 r 3385 4536',
15346 'STATE 6 l 4538 4537',
15347 'STATE 6 n 3385 3393',
15348 'STATE 4 p 3385 3494',
15349 'STATE 5 i 3385 4539',
15350 'STATE 5 v 3522 3385',
15351 'STATE 5 a 4541 4540',
15352 'STATE 6 o 3393 4542',
15353 'STATE 4 c 4544 4543',
15354 'STATE 3 b 3494 4545',
15355 'STATE 5 o 4546 3385',
15356 'STATE 4 n 3393 4547',
15357 'STATE 6 u 4548 3385',
15358 'STATE 3 p 3385 4549',
15359 'STATE 5 n 4322 3385',
15360 'STATE 5 h 4551 4550',
15361 'STATE 6 a 3494 4552',
15362 'STATE 6 r 4554 4553',
15363 'STATE 5 a 3455 4555',
15364 'STATE 6 e 3455 4556',
15365 'STATE 5 k 3385 4557',
15366 'STATE 5 a 3385 3494',
15367 'STATE 5 a 3494 3385',
15368 'STATE 5 g 3522 4558',
15369 'STATE 5 o 3455 3522',
15370 'STATE 5 u 4560 4559',
15371 'STATE 5 r 3455 4561',
15372 'STATE 6 a 3444 4562',
15373 'STATE 4 b 3455 4563',
15374 'STATE 4 p 3455 3444',
15375 'STATE 6 b 3393 4564',
15376 'STATE 5 k 4566 4565',
15377 'STATE 1 # 3393 4567',
15378 'STATE 3 l 3399 4568',
15379 'STATE 6 o 4569 3399',
15380 'STATE 5 s 3399 4570',
15381 'STATE 6 t 3385 4571',
15382 'STATE 1 0 3385 4572',
15383 'STATE 1 e 3385 3399',
15384 'STATE 4 z 4574 4573',
15385 'STATE 1 c 3399 4575',
15386 'STATE 2 s 3399 4576',
15387 'STATE 3 j 3455 4577',
15388 'STATE 3 r 4579 4578',
15389 'STATE 2 a 3494 4580',
15390 'STATE 3 k 3455 4581',
15391 'STATE 1 n 3444 4582',
15392 'STATE 2 h 4584 4583',
15393 'STATE 2 e 4586 4585',
15394 'STATE 6 e 4587 3385',
15395 'STATE 5 e 4589 4588',
15396 'STATE 2 p 3455 4590',
15397 'STATE 4 d 4592 4591',
15398 'STATE 2 i 3444 4593',
15399 'STATE 4 v 3494 4594',
15400 'STATE 4 d 3393 3455',
15401 'STATE 4 y 4596 4595',
15402 'STATE 4 b 3455 4597',
15403 'STATE 6 m 3455 4598',
15404 'STATE 5 i 3393 3494',
15405 'STATE 3 o 3399 4599',
15406 'STATE 3 l 3399 4600',
15407 'STATE 1 # 3393 4601',
15408 'STATE 2 l 3494 4602',
15409 'STATE 2 e 3522 4603',
15410 'STATE 4 y 3399 4604',
15411 'STATE 3 l 3393 4605',
15412 'STATE 1 a 3524 4606',
15413 'STATE 3 n 3524 3393',
15414 'STATE 3 c 3399 4607',
15415 'STATE 3 o 4609 4608',
15416 'STATE 2 i 3399 4610',
15417 'STATE 2 i 4612 4611',
15418 'STATE 2 o 3385 3393',
15419 'STATE 1 # 3399 4613',
15420 'STATE 5 a 3455 4614',
15421 'STATE 5 o 3522 4615',
15422 'STATE 2 r 3385 4616',
15423 'STATE 2 a 3455 4001',
15424 'STATE 6 s 3385 4617',
15425 'STATE 1 # 3385 4618',
15426 'STATE 3 b 3455 4619',
15427 'STATE 3 c 3455 3385',
15428 'STATE 1 i 3455 4620',
15429 'STATE 3 v 3455 3385',
15430 'STATE 3 r 4622 4621',
15431 'STATE 5 n 4624 4623',
15432 'STATE 6 n 3455 4625',
15433 'STATE 1 l 3522 4626',
15434 'STATE 3 r 3385 4627',
15435 'STATE 2 o 3455 4628',
15436 'STATE 3 h 3455 3393',
15437 'STATE 2 r 3385 4629',
15438 'STATE 6 r 4631 4630',
15439 'STATE 1 e 3393 4632',
15440 'STATE 3 p 3385 4420',
15441 'STATE 3 c 4178 4633',
15442 'STATE 1 s 3385 3455',
15443 'STATE 4 l 4635 4634',
15444 'STATE 3 r 4636 3455',
15445 'STATE 2 s 4638 4637',
15446 'STATE 4 t 3385 3494',
15447 'STATE 1 f 3455 4639',
15448 'STATE 2 l 3385 3455',
15449 'STATE 1 s 3455 4640',
15450 'STATE 2 e 3455 4641',
15451 'STATE 2 l 3522 4642',
15452 'STATE 1 r 4643 3455',
15453 'STATE 4 g 4645 4644',
15454 'STATE 5 o 3494 4646',
15455 'STATE 5 e 4648 4647',
15456 'STATE 5 e 3385 4649',
15457 'STATE 5 p 3522 4650',
15458 'STATE 5 c 4652 4651',
15459 'STATE 5 e 4654 4653',
15460 'STATE 3 m 4656 4655',
15461 'STATE 6 a 4658 4657',
15462 'STATE 4 q 4660 4659',
15463 'STATE 6 r 3494 3385',
15464 'PHONE ey',
15465 'STATE 4 n 3524 3385',
15466 'STATE 3 l 3393 4661',
15467 'STATE 4 n 4662 3385',
15468 'STATE 3 c 3522 4663',
15469 'STATE 6 a 3385 4664',
15470 'STATE 6 i 3494 4665',
15471 'STATE 6 r 3494 4338',
15472 'STATE 5 t 4667 4666',
15473 'STATE 4 t 3455 4668',
15474 'STATE 5 o 3455 4669',
15475 'STATE 6 i 3455 3444',
15476 'STATE 6 d 3494 4670',
15477 'STATE 5 a 3385 4671',
15478 'STATE 5 o 4673 4672',
15479 'STATE 6 s 3393 4674',
15480 'STATE 6 s 3455 4675',
15481 'STATE 5 y 3444 4676',
15482 'STATE 4 p 3455 4677',
15483 'STATE 6 p 3393 4678',
15484 'STATE 5 v 4680 4679',
15485 'STATE 3 p 3393 4681',
15486 'STATE 5 t 3444 3393',
15487 'STATE 3 v 4245 3399',
15488 'STATE 2 m 3399 3385',
15489 'STATE 5 v 3399 4682',
15490 'STATE 6 n 4683 3385',
15491 'STATE 3 m 3385 4684',
15492 'STATE 4 m 4686 4685',
15493 'STATE 1 # 3385 4687',
15494 'STATE 2 a 3393 4688',
15495 'STATE 3 r 4689 3399',
15496 'STATE 3 r 4691 4690',
15497 'STATE 2 r 4693 4692',
15498 'STATE 2 r 3455 3385',
15499 'STATE 1 o 3494 4694',
15500 'STATE 1 k 3455 4695',
15501 'STATE 1 i 3444 3399',
15502 'STATE 1 o 3444 4696',
15503 'STATE 1 s 3444 4697',
15504 'STATE 2 n 4699 4698',
15505 'STATE 3 l 4701 4700',
15506 'STATE 3 n 4703 4702',
15507 'STATE 4 c 4705 4704',
15508 'STATE 2 p 3455 4706',
15509 'STATE 2 c 4708 4707',
15510 'STATE 2 i 3399 4709',
15511 'STATE 6 t 3728 4710',
15512 'STATE 1 s 3385 3393',
15513 'STATE 3 n 3455 4711',
15514 'STATE 3 y 3399 4712',
15515 'STATE 5 e 3399 3524',
15516 'STATE 4 s 4545 3399',
15517 'STATE 5 i 4714 4713',
15518 'STATE 3 u 4716 4715',
15519 'STATE 1 s 3399 3455',
15520 'STATE 2 a 3455 3522',
15521 'STATE 1 # 3385 4717',
15522 'STATE 2 r 3522 3385',
15523 'STATE 3 u 3399 3393',
15524 'STATE 2 c 3393 4718',
15525 'STATE 1 u 3524 3393',
15526 'STATE 2 c 4720 4719',
15527 'STATE 6 p 3385 4721',
15528 'STATE 5 e 3455 3399',
15529 'STATE 3 v 3399 4722',
15530 'STATE 6 o 3393 4723',
15531 'STATE 1 l 3399 4724',
15532 'STATE 3 n 3455 3385',
15533 'STATE 6 e 3455 4725',
15534 'STATE 6 s 3455 4726',
15535 'STATE 2 a 3385 4727',
15536 'STATE 6 y 3455 3385',
15537 'STATE 6 i 3385 4728',
15538 'STATE 1 # 3385 4729',
15539 'STATE 1 k 3455 4730',
15540 'STATE 3 t 3524 3455',
15541 'STATE 1 u 3455 4731',
15542 'STATE 5 k 4733 4732',
15543 'STATE 6 e 3475 3385',
15544 'STATE 6 c 3385 4734',
15545 'STATE 6 i 3385 4735',
15546 'STATE 1 e 3455 4736',
15547 'STATE 5 o 3455 4737',
15548 'STATE 2 h 3522 4738',
15549 'STATE 3 o 3399 4739',
15550 'STATE 1 i 3455 3444',
15551 'STATE 3 l 3393 4740',
15552 'STATE 3 r 3385 4741',
15553 'STATE 4 m 3455 4742',
15554 'STATE 3 t 3455 4743',
15555 'STATE 2 t 3455 4744',
15556 'STATE 6 s 4746 4745',
15557 'STATE 3 t 4747 3385',
15558 'STATE 1 h 3399 4748',
15559 'STATE 3 v 3385 4749',
15560 'STATE 2 o 3455 3385',
15561 'STATE 1 o 3522 4750',
15562 'STATE 3 d 3455 3385',
15563 'STATE 5 a 4297 4751',
15564 'STATE 5 g 3385 4752',
15565 'STATE 5 l 3494 4753',
15566 'STATE 5 i 4755 4754',
15567 'STATE 6 n 3393 3385',
15568 'STATE 5 o 3389 4756',
15569 'STATE 5 u 3385 4757',
15570 'STATE 5 t 4759 4758',
15571 'STATE 6 y 3455 3522',
15572 'STATE 5 o 4761 4760',
15573 'STATE 6 r 4763 4762',
15574 'STATE 4 l 4765 4764',
15575 'STATE 6 r 3455 4766',
15576 'STATE 6 u 3393 4767',
15577 'STATE 4 d 3393 4768',
15578 'STATE 6 c 3455 4769',
15579 'STATE 3 s 3393 4435',
15580 'STATE 4 d 3524 4770',
15581 'STATE 3 v 3522 3385',
15582 'STATE 4 s 3385 4771',
15583 'STATE 6 o 4773 4772',
15584 'STATE 6 a 3494 3522',
15585 'STATE 4 s 4775 4774',
15586 'STATE 6 a 3444 3385',
15587 'STATE 4 s 3455 4776',
15588 'STATE 5 u 3385 3455',
15589 'STATE 5 l 3494 4777',
15590 'STATE 5 l 3385 4778',
15591 'STATE 5 r 4780 4779',
15592 'STATE 6 s 3393 4781',
15593 'STATE 6 b 3444 4782',
15594 'STATE 5 i 4784 4783',
15595 'STATE 6 u 4786 4785',
15596 'STATE 6 e 3455 4787',
15597 'STATE 4 p 4789 4788',
15598 'STATE 2 c 4791 4790',
15599 'STATE 1 e 3385 3393',
15600 'STATE 3 r 3393 4792',
15601 'STATE 3 v 3399 4793',
15602 'STATE 3 b 3385 3389',
15603 'STATE 3 h 3385 4794',
15604 'STATE 4 u 3399 4795',
15605 'STATE 1 # 3385 3455',
15606 'STATE 1 i 3522 4796',
15607 'STATE 1 # 3393 4797',
15608 'STATE 2 f 3455 4798',
15609 'STATE 2 l 3399 4799',
15610 'STATE 2 a 3399 4800',
15611 'STATE 1 e 3455 4801',
15612 'STATE 3 n 3385 3522',
15613 'STATE 2 i 3494 4802',
15614 'STATE 2 u 4803 3455',
15615 'STATE 1 s 4804 3393',
15616 'STATE 1 c 3444 3393',
15617 'STATE 4 t 4806 4805',
15618 'STATE 5 r 3455 4807',
15619 'STATE 5 e 4809 4808',
15620 'STATE 6 i 3385 3455',
15621 'STATE 3 d 3494 3385',
15622 'STATE 1 e 3494 3522',
15623 'STATE 4 t 4811 4810',
15624 'STATE 2 o 3385 4812',
15625 'STATE 4 s 3444 3455',
15626 'STATE 2 e 4813 3399',
15627 'STATE 3 r 3455 3399',
15628 'STATE 2 a 4815 4814',
15629 'STATE 1 n 3399 4816',
15630 'STATE 4 m 3385 4817',
15631 'STATE 4 x 4819 4818',
15632 'STATE 4 c 4821 4820',
15633 'STATE 6 e 3522 4822',
15634 'STATE 5 z 4824 4823',
15635 'STATE 5 a 3385 3399',
15636 'STATE 1 e 3385 4825',
15637 'STATE 3 r 3444 3393',
15638 'STATE 6 t 3399 4826',
15639 'STATE 1 n 3399 3444',
15640 'STATE 2 s 4686 4827',
15641 'STATE 1 # 3385 4828',
15642 'STATE 1 f 3399 4829',
15643 'STATE 6 n 3399 4830',
15644 'STATE 6 n 3455 4831',
15645 'STATE 5 i 3522 4832',
15646 'STATE 2 n 3385 3455',
15647 'STATE 1 a 4833 3385',
15648 'STATE 3 v 4803 3385',
15649 'STATE 2 o 3455 4834',
15650 'STATE 1 o 3455 4835',
15651 'STATE 5 g 4837 4836',
15652 'STATE 1 o 3455 4838',
15653 'STATE 6 e 3393 4839',
15654 'STATE 3 l 3522 3385',
15655 'STATE 1 n 3455 4840',
15656 'STATE 2 a 4701 4841',
15657 'STATE 2 a 4842 3385',
15658 'STATE 1 o 3455 4843',
15659 'STATE 3 r 3393 3444',
15660 'STATE 3 s 3385 4844',
15661 'STATE 4 t 4846 4845',
15662 'STATE 3 p 3385 3455',
15663 'STATE 2 p 3385 4847',
15664 'STATE 1 t 3455 3385',
15665 'STATE 4 t 3455 3385',
15666 'STATE 6 e 3522 3385',
15667 'STATE 6 r 4849 4848',
15668 'STATE 1 a 4851 4850',
15669 'STATE 2 p 3522 4852',
15670 'STATE 4 s 4854 4853',
15671 'STATE 5 l 3385 4855',
15672 'STATE 5 c 3494 3385',
15673 'STATE 6 n 3385 4856',
15674 'STATE 6 l 3393 3385',
15675 'STATE 6 o 3389 4857',
15676 'STATE 5 i 3522 3385',
15677 'STATE 5 d 4859 4858',
15678 'STATE 6 a 3522 4860',
15679 'STATE 5 r 4862 4861',
15680 'STATE 4 g 4274 4863',
15681 'STATE 3 t 4865 4864',
15682 'STATE 3 g 3385 4866',
15683 'STATE 3 p 3385 4867',
15684 'STATE 6 n 3385 4868',
15685 'STATE 4 g 3385 4869',
15686 'STATE 3 b 4871 4870',
15687 'STATE 4 n 3393 3385',
15688 'STATE 3 s 3385 4872',
15689 'STATE 3 m 3385 4873',
15690 'STATE 4 t 3385 3522',
15691 'STATE 6 r 4773 4874',
15692 'STATE 5 t 3494 3385',
15693 'STATE 5 u 4876 4875',
15694 'STATE 5 e 3522 4877',
15695 'STATE 5 a 3455 3385',
15696 'STATE 5 r 3494 4878',
15697 'STATE 5 o 3385 4879',
15698 'STATE 4 d 4881 4880',
15699 'STATE 6 o 4883 4882',
15700 'STATE 4 s 4885 4884',
15701 'STATE 4 d 3455 4886',
15702 'STATE 5 l 3455 4887',
15703 'STATE 6 n 3455 3444',
15704 'STATE 6 v 3494 4888',
15705 'STATE 5 o 3494 3455',
15706 'STATE 6 m 3455 4889',
15707 'STATE 6 c 3455 4890',
15708 'STATE 6 c 3393 3444',
15709 'STATE 2 r 4892 4891',
15710 'STATE 5 t 3444 4893',
15711 'STATE 3 n 3393 4894',
15712 'STATE 3 h 3399 4895',
15713 'STATE 1 # 3385 4896',
15714 'STATE 3 o 3399 4897',
15715 'STATE 3 u 3385 3522',
15716 'STATE 3 n 3444 4898',
15717 'STATE 2 d 3455 3399',
15718 'STATE 1 i 3399 4899',
15719 'STATE 2 d 3524 3399',
15720 'STATE 1 i 3385 4900',
15721 'STATE 2 u 3494 4901',
15722 'STATE 1 r 3455 3385',
15723 'STATE 2 l 3393 3444',
15724 'STATE 4 d 4903 4902',
15725 'STATE 5 e 4905 4904',
15726 'STATE 3 t 4907 4906',
15727 'STATE 4 u 3399 4908',
15728 'STATE 4 v 3494 4909',
15729 'STATE 3 t 4911 4910',
15730 'STATE 5 a 3522 3399',
15731 'STATE 5 o 4913 4912',
15732 'STATE 5 a 3399 3455',
15733 'STATE 6 l 4915 4914',
15734 'STATE 3 t 3455 3399',
15735 'STATE 2 m 3385 4916',
15736 'STATE 3 m 3385 4917',
15737 'STATE 5 e 4919 4918',
15738 'STATE 3 n 3494 4776',
15739 'STATE 3 r 4920 3385',
15740 'STATE 5 e 3455 4921',
15741 'STATE 6 c 3455 4922',
15742 'STATE 4 d 4924 4923',
15743 'STATE 1 # 3385 3522',
15744 'STATE 2 h 3385 4925',
15745 'STATE 5 n 3444 4926',
15746 'STATE 6 h 3385 4927',
15747 'STATE 5 a 4928 3455',
15748 'STATE 6 c 4930 4929',
15749 'STATE 3 d 3385 3399',
15750 'STATE 1 i 3385 4931',
15751 'STATE 1 e 3522 3455',
15752 'STATE 6 a 3385 3455',
15753 'STATE 2 e 3455 4932',
15754 'STATE 1 e 3455 3524',
15755 'STATE 5 u 4934 4933',
15756 'STATE 6 t 3385 4935',
15757 'STATE 6 e 3385 4936',
15758 'STATE 6 a 3393 4937',
15759 'STATE 2 i 3455 4938',
15760 'STATE 5 a 3455 4939',
15761 'STATE 3 m 3385 4686',
15762 'STATE 3 v 3455 3399',
15763 'STATE 3 l 3385 4420',
15764 'STATE 4 d 4930 4343',
15765 'STATE 3 s 3385 3455',
15766 'STATE 1 n 3455 4940',
15767 'STATE 1 c 3522 4941',
15768 'STATE 1 e 3385 4942',
15769 'STATE 1 l 4944 4943',
15770 'STATE 2 c 3385 4945',
15771 'STATE 1 e 3522 4946',
15772 'STATE 4 l 4948 4947',
15773 'STATE 6 a 4950 4949',
15774 'STATE 6 e 3385 4951',
15775 'STATE 5 a 3494 4952',
15776 'STATE 6 s 3385 4953',
15777 'STATE 5 o 3455 4954',
15778 'STATE 6 a 3522 4955',
15779 'STATE 6 h 3522 4956',
15780 'STATE 3 o 3399 4957',
15781 'STATE 4 t 4959 4958',
15782 'STATE 4 c 4961 4960',
15783 'STATE 4 v 4963 4962',
15784 'STATE 4 l 3385 4964',
15785 'STATE 3 p 4966 4965',
15786 'STATE 4 c 3494 4967',
15787 'STATE 3 v 3522 4968',
15788 'STATE 6 n 3385 4969',
15789 'STATE 4 v 3385 4970',
15790 'STATE 6 e 3455 4971',
15791 'STATE 3 l 3522 4972',
15792 'STATE 4 t 3385 3524',
15793 'STATE 5 t 3494 4973',
15794 'STATE 5 a 4975 4974',
15795 'STATE 4 b 3385 3455',
15796 'STATE 6 e 3455 4976',
15797 'STATE 5 a 3494 4977',
15798 'STATE 5 e 3385 4978',
15799 'STATE 4 m 4881 4979',
15800 'STATE 5 i 4980 3385',
15801 'STATE 4 p 4981 3444',
15802 'STATE 4 t 3385 4982',
15803 'STATE 4 b 3444 4983',
15804 'STATE 6 u 3444 4984',
15805 'STATE 6 m 3455 4985',
15806 'STATE 6 r 3455 4986',
15807 'STATE 6 r 3455 4987',
15808 'STATE 4 l 4989 4988',
15809 'STATE 4 c 3444 4990',
15810 'STATE 2 l 3399 4991',
15811 'STATE 5 l 3393 3444',
15812 'STATE 1 a 3399 4992',
15813 'STATE 6 # 3399 3393',
15814 'STATE 3 g 3399 4993',
15815 'STATE 6 c 3399 3385',
15816 'STATE 3 u 3399 4994',
15817 'STATE 2 r 3393 4995',
15818 'STATE 2 n 3399 4996',
15819 'STATE 2 m 3455 4997',
15820 'STATE 1 r 3494 4998',
15821 'STATE 5 c 3385 4999',
15822 'STATE 5 g 5001 5000',
15823 'STATE 6 r 3455 5002',
15824 'STATE 3 m 3455 5003',
15825 'STATE 4 b 4274 5004',
15826 'STATE 5 p 3385 5005',
15827 'STATE 3 n 5007 5006',
15828 'STATE 6 r 3444 5008',
15829 'STATE 2 e 3455 5009',
15830 'STATE 5 a 3522 3455',
15831 'STATE 5 h 3455 3399',
15832 'STATE 1 c 3385 3455',
15833 'STATE 4 f 5011 5010',
15834 'STATE 2 e 3385 4274',
15835 'STATE 3 p 3393 5012',
15836 'STATE 3 d 3385 5013',
15837 'STATE 2 a 5015 5014',
15838 'STATE 4 s 3399 5016',
15839 'STATE 6 r 5018 5017',
15840 'STATE 6 n 3393 5019',
15841 'STATE 4 s 3455 5020',
15842 'STATE 4 j 3524 5021',
15843 'STATE 5 i 3385 5022',
15844 'STATE 3 n 3385 5023',
15845 'STATE 1 g 3399 3444',
15846 'STATE 6 d 3455 5024',
15847 'STATE 2 o 3399 3455',
15848 'STATE 1 # 5026 5025',
15849 'STATE 3 r 3455 3385',
15850 'STATE 1 e 3385 5027',
15851 'STATE 1 r 3455 5028',
15852 'STATE 5 o 3455 5029',
15853 'STATE 3 t 3385 4727',
15854 'STATE 1 e 3494 5030',
15855 'STATE 2 o 3385 5027',
15856 'STATE 2 u 3455 5031',
15857 'STATE 1 i 3455 3385',
15858 'STATE 2 u 3522 5032',
15859 'STATE 2 g 3385 5033',
15860 'STATE 2 l 3399 5034',
15861 'STATE 2 c 3455 5035',
15862 'STATE 2 m 3522 5036',
15863 'STATE 3 m 3385 3522',
15864 'STATE 6 i 4579 5037',
15865 'STATE 3 h 3522 5038',
15866 'STATE 5 f 5037 5039',
15867 'STATE 5 i 5041 5040',
15868 'STATE 5 c 5043 5042',
15869 'STATE 5 t 3455 5044',
15870 'STATE 5 e 3385 3393',
15871 'STATE 6 l 3494 3385',
15872 'STATE 6 g 3385 5045',
15873 'STATE 5 a 3522 5046',
15874 'STATE 6 o 3522 3385',
15875 'STATE 6 i 3522 5047',
15876 'STATE 6 a 5049 5048',
15877 'STATE 4 h 5051 5050',
15878 'STATE 3 b 3455 5052',
15879 'STATE 3 h 5054 5053',
15880 'STATE 6 m 3494 3385',
15881 'STATE 4 g 5056 5055',
15882 'STATE 6 n 3385 5057',
15883 'STATE 4 n 3385 3455',
15884 'STATE 4 d 3385 5058',
15885 'STATE 4 t 3393 3385',
15886 'STATE 6 l 5060 5059',
15887 'STATE 6 g 3455 5061',
15888 'STATE 6 m 3385 5062',
15889 'STATE 4 t 5064 5063',
15890 'STATE 6 n 3385 5065',
15891 'STATE 6 s 3455 5066',
15892 'STATE 6 h 3494 5067',
15893 'STATE 5 e 5069 5068',
15894 'STATE 6 t 3455 5070',
15895 'STATE 5 i 5071 4776',
15896 'STATE 6 n 3444 3385',
15897 'STATE 5 b 3522 3385',
15898 'STATE 5 i 5073 5072',
15899 'STATE 6 s 3444 3385',
15900 'STATE 6 e 3385 3444',
15901 'STATE 4 p 3444 3385',
15902 'STATE 4 p 3455 5074',
15903 'STATE 6 l 3444 3455',
15904 'STATE 6 i 3444 5075',
15905 'STATE 5 u 3455 3385',
15906 'STATE 6 i 5076 3385',
15907 'STATE 4 m 3385 5077',
15908 'STATE 6 n 3455 3385',
15909 'STATE 6 t 3393 3444',
15910 'STATE 3 n 3399 5078',
15911 'STATE 6 s 3385 3393',
15912 'STATE 3 b 3399 5079',
15913 'STATE 4 c 5081 5080',
15914 'STATE 1 n 3444 5082',
15915 'STATE 2 a 5083 3399',
15916 'STATE 2 a 3385 5084',
15917 'STATE 3 b 3494 3522',
15918 'STATE 6 t 5086 5085',
15919 'STATE 6 y 3455 5087',
15920 'STATE 1 o 3494 3385',
15921 'STATE 3 k 3455 5088',
15922 'STATE 3 k 3455 5089',
15923 'STATE 3 d 5091 5090',
15924 'STATE 1 o 3522 3455',
15925 'STATE 1 r 5093 5092',
15926 'STATE 6 t 3494 5094',
15927 'STATE 6 d 3393 3455',
15928 'STATE 4 s 5096 5095',
15929 'STATE 3 s 3385 5097',
15930 'STATE 2 e 3455 5098',
15931 'STATE 3 c 3393 3455',
15932 'STATE 3 l 3455 3393',
15933 'STATE 2 i 5100 5099',
15934 'STATE 5 o 3399 5101',
15935 'STATE 6 s 3393 5102',
15936 'STATE 6 n 5104 5103',
15937 'STATE 4 p 3444 5105',
15938 'STATE 6 u 3494 3444',
15939 'STATE 4 c 3455 5106',
15940 'STATE 5 a 5108 5107',
15941 'STATE 5 o 3524 5109',
15942 'STATE 2 c 3385 3494',
15943 'STATE 5 e 5111 5110',
15944 'STATE 6 n 5113 5112',
15945 'STATE 3 m 3522 5114',
15946 'STATE 6 o 3385 3455',
15947 'STATE 3 s 3455 5115',
15948 'STATE 3 u 3399 5116',
15949 'STATE 6 e 3455 5117',
15950 'STATE 2 l 3455 5118',
15951 'STATE 5 h 3455 3385',
15952 'STATE 2 d 3385 3455',
15953 'STATE 2 q 3385 5119',
15954 'STATE 2 e 3455 3399',
15955 'STATE 2 a 5121 5120',
15956 'STATE 6 e 3455 3385',
15957 'STATE 1 u 3455 5122',
15958 'STATE 6 l 3385 5123',
15959 'STATE 5 u 3455 5124',
15960 'STATE 6 a 3455 5125',
15961 'STATE 6 o 3385 5126',
15962 'STATE 6 h 3385 5127',
15963 'STATE 5 c 3385 5128',
15964 'STATE 5 m 3385 5129',
15965 'STATE 6 o 5131 5130',
15966 'STATE 6 r 3522 4955',
15967 'STATE 4 n 5133 5132',
15968 'STATE 3 s 5134 3385',
15969 'STATE 4 d 5136 5135',
15970 'STATE 6 a 3524 3385',
15971 'STATE 6 o 3385 5137',
15972 'STATE 6 s 5139 5138',
15973 'STATE 6 r 3385 5140',
15974 'STATE 6 o 3393 5141',
15975 'STATE 3 b 3494 3385',
15976 'STATE 6 l 3385 5142',
15977 'STATE 3 f 3393 5143',
15978 'STATE 4 p 3385 5144',
15979 'STATE 4 g 3393 5145',
15980 'STATE 3 b 3455 4045',
15981 'STATE 6 c 3385 5146',
15982 'STATE 4 g 5064 5147',
15983 'STATE 6 t 3455 3385',
15984 'STATE 6 s 3385 5148',
15985 'STATE 6 d 3455 3385',
15986 'STATE 5 c 3494 5149',
15987 'STATE 5 o 5151 5150',
15988 'STATE 4 t 3455 5152',
15989 'STATE 4 t 3455 5153',
15990 'STATE 6 g 3455 3385',
15991 'STATE 4 s 5155 5154',
15992 'STATE 4 s 5157 5156',
15993 'STATE 4 m 3455 5158',
15994 'STATE 4 p 5160 5159',
15995 'STATE 5 t 3385 3494',
15996 'STATE 6 p 3393 5161',
15997 'STATE 1 r 3393 5162',
15998 'STATE 3 f 3399 5163',
15999 'STATE 2 r 3385 5164',
16000 'STATE 2 a 3494 4824',
16001 'STATE 2 o 3444 5165',
16002 'STATE 3 l 5166 3399',
16003 'STATE 2 i 3963 5167',
16004 'STATE 4 g 5169 5168',
16005 'STATE 5 h 5171 5170',
16006 'STATE 1 s 3385 5172',
16007 'STATE 6 e 5174 5173',
16008 'STATE 2 p 5176 5175',
16009 'STATE 1 u 5178 5177',
16010 'STATE 1 a 3455 4701',
16011 'STATE 3 g 3455 5179',
16012 'STATE 4 m 3385 5180',
16013 'STATE 5 r 3455 4776',
16014 'STATE 4 b 3399 5181',
16015 'STATE 3 l 3399 3455',
16016 'STATE 3 r 5183 5182',
16017 'STATE 6 n 3399 5096',
16018 'STATE 4 q 5185 5184',
16019 'STATE 3 n 5186 5113',
16020 'STATE 3 r 3522 5187',
16021 'STATE 6 r 5189 5188',
16022 'STATE 4 p 5191 5190',
16023 'STATE 4 s 3385 3444',
16024 'STATE 4 f 3385 5192',
16025 'STATE 4 d 3393 4992',
16026 'STATE 5 o 5194 5193',
16027 'STATE 4 m 5196 5195',
16028 'STATE 3 r 3385 5197',
16029 'STATE 5 o 3455 5198',
16030 'STATE 3 c 3385 5199',
16031 'STATE 2 a 3455 3579',
16032 'STATE 3 c 3399 3455',
16033 'STATE 3 r 3455 5200',
16034 'STATE 2 n 3455 5201',
16035 'STATE 5 h 3455 5202',
16036 'STATE 3 s 3455 5203',
16037 'STATE 6 t 3385 5204',
16038 'STATE 3 t 3385 5205',
16039 'STATE 6 a 5207 5206',
16040 'STATE 6 i 5209 5208',
16041 'STATE 1 r 3455 3522',
16042 'STATE 5 h 3385 5210',
16043 'STATE 5 o 3455 5211',
16044 'STATE 6 m 3455 5212',
16045 'STATE 5 s 3385 5213',
16046 'STATE 6 o 3385 3522',
16047 'STATE 5 p 3522 3385',
16048 'STATE 5 i 5215 5214',
16049 'STATE 5 l 5217 5216',
16050 'STATE 5 f 3522 5218',
16051 'STATE 6 u 5219 3385',
16052 'STATE 3 m 5221 5220',
16053 'STATE 5 s 3522 3385',
16054 'STATE 4 n 3385 5222',
16055 'STATE 3 p 4545 4701',
16056 'STATE 6 u 3522 3385',
16057 'STATE 6 l 3385 5223',
16058 'STATE 4 l 3522 3393',
16059 'STATE 6 t 3385 3393',
16060 'STATE 3 b 5225 5224',
16061 'STATE 3 l 3385 3494',
16062 'STATE 4 v 3385 5226',
16063 'STATE 6 v 5228 5227',
16064 'STATE 4 f 3455 5229',
16065 'STATE 6 p 3385 5230',
16066 'STATE 3 v 3385 5231',
16067 'STATE 6 t 3455 5232',
16068 'STATE 6 n 3494 3385',
16069 'STATE 4 n 3385 5233',
16070 'STATE 4 n 3455 5234',
16071 'STATE 4 n 3389 4876',
16072 'STATE 4 b 3455 3385',
16073 'STATE 4 o 3444 5235',
16074 'STATE 6 o 3455 5236',
16075 'STATE 4 w 3444 5237',
16076 'STATE 6 s 3455 5238',
16077 'STATE 4 d 3455 3444',
16078 'STATE 4 s 4090 3455',
16079 'STATE 6 t 3385 3444',
16080 'STATE 6 s 3393 5239',
16081 'STATE 2 i 3399 5240',
16082 'STATE 5 n 3385 3399',
16083 'STATE 2 p 3385 5241',
16084 'STATE 3 h 3393 3444',
16085 'STATE 1 r 3522 3399',
16086 'STATE 3 d 3385 5242',
16087 'STATE 4 v 5244 5243',
16088 'STATE 5 a 5246 5245',
16089 'STATE 3 s 5248 5247',
16090 'STATE 2 b 3494 5249',
16091 'STATE 6 w 3399 5250',
16092 'STATE 1 e 5252 5251',
16093 'STATE 5 h 3385 5253',
16094 'STATE 6 r 5255 5254',
16095 'STATE 3 l 3393 3455',
16096 'STATE 4 f 3399 5256',
16097 'STATE 6 r 3455 5257',
16098 'STATE 1 v 3494 5258',
16099 'STATE 5 o 3385 3455',
16100 'STATE 4 h 3399 5259',
16101 'STATE 6 n 5261 5260',
16102 'STATE 2 t 3385 4727',
16103 'STATE 5 a 5263 5262',
16104 'STATE 2 f 3393 3494',
16105 'STATE 4 f 3455 3385',
16106 'STATE 3 l 4545 5264',
16107 'STATE 4 v 5266 5265',
16108 'STATE 2 f 3385 5267',
16109 'STATE 6 d 5269 5268',
16110 'STATE 5 a 3444 3385',
16111 'STATE 4 s 3455 3444',
16112 'STATE 5 i 3385 5270',
16113 'STATE 3 r 3385 5271',
16114 'STATE 4 b 3393 5272',
16115 'STATE 3 n 3455 5273',
16116 'STATE 2 a 3524 5271',
16117 'STATE 5 k 3385 5274',
16118 'STATE 2 r 3385 5275',
16119 'STATE 6 n 5276 3399',
16120 'STATE 2 p 3455 5277',
16121 'STATE 2 o 3455 5278',
16122 'STATE 6 a 3524 3455',
16123 'STATE 6 s 3385 3455',
16124 'STATE 3 d 3455 5279',
16125 'STATE 2 o 5280 3385',
16126 'STATE 3 t 3455 5281',
16127 'STATE 3 m 3385 5282',
16128 'STATE 1 v 3455 3522',
16129 'STATE 4 d 3385 5283',
16130 'STATE 5 l 3385 5284',
16131 'STATE 6 z 3389 5285',
16132 'STATE 5 t 3385 5286',
16133 'STATE 6 t 3385 5287',
16134 'STATE 6 n 3385 3522',
16135 'STATE 5 r 3522 5288',
16136 'STATE 6 a 3455 3522',
16137 'STATE 5 j 3522 5289',
16138 'STATE 3 s 3494 3385',
16139 'STATE 3 z 3385 5290',
16140 'STATE 6 e 3385 5291',
16141 'STATE 3 b 3455 5292',
16142 'STATE 4 m 5294 5293',
16143 'STATE 4 h 3393 5295',
16144 'STATE 4 n 3385 5296',
16145 'STATE 4 m 3385 5297',
16146 'STATE 4 m 5299 5298',
16147 'STATE 4 h 3455 4545',
16148 'STATE 4 v 4545 3455',
16149 'STATE 4 t 5301 5300',
16150 'STATE 6 l 3522 5302',
16151 'STATE 4 n 3455 3385',
16152 'STATE 4 d 3385 5303',
16153 'STATE 6 n 5304 4746',
16154 'STATE 5 l 5306 5305',
16155 'STATE 6 i 5308 5307',
16156 'STATE 4 t 5310 5309',
16157 'STATE 6 g 3385 3455',
16158 'STATE 6 n 5311 3444',
16159 'STATE 1 o 3399 5312',
16160 'STATE 1 n 5314 5313',
16161 'STATE 1 a 3455 5315',
16162 'STATE 4 m 5317 5316',
16163 'STATE 5 a 4545 5318',
16164 'STATE 3 r 5320 5319',
16165 'STATE 6 l 3393 3494',
16166 'STATE 2 g 3455 5321',
16167 'STATE 1 e 3455 3494',
16168 'STATE 2 k 3494 3385',
16169 'STATE 6 s 3393 5322',
16170 'STATE 5 c 3385 5323',
16171 'STATE 5 r 3455 3385',
16172 'STATE 3 t 3522 3399',
16173 'STATE 6 d 3455 3399',
16174 'STATE 2 a 3455 3399',
16175 'STATE 5 u 3455 5324',
16176 'STATE 4 c 3385 3444',
16177 'STATE 4 g 5326 5325',
16178 'STATE 2 c 3455 5327',
16179 'STATE 4 s 5329 5328',
16180 'STATE 4 t 3455 5330',
16181 'STATE 2 o 5332 5331',
16182 'STATE 3 a 3399 5333',
16183 'STATE 3 n 3455 5334',
16184 'STATE 4 d 4648 3385',
16185 'STATE 6 n 5335 3393',
16186 'STATE 4 v 3385 5336',
16187 'STATE 5 e 3393 5337',
16188 'STATE 4 j 3385 3444',
16189 'STATE 5 r 3385 5338',
16190 'STATE 1 # 3393 3524',
16191 'STATE 1 a 3385 5339',
16192 'STATE 3 d 3385 3393',
16193 'STATE 6 a 3455 5340',
16194 'STATE 2 c 3455 5341',
16195 'STATE 2 e 3455 3385',
16196 'STATE 1 t 3455 5342',
16197 'STATE 1 h 3455 5343',
16198 'STATE 2 e 4745 3385',
16199 'STATE 1 p 3385 5344',
16200 'STATE 2 u 3385 5345',
16201 'STATE 1 p 3455 3385',
16202 'STATE 5 i 5347 5346',
16203 'STATE 5 e 3385 5348',
16204 'STATE 6 s 3455 3385',
16205 'STATE 6 i 5128 3385',
16206 'STATE 6 h 3385 5349',
16207 'STATE 5 h 3522 5350',
16208 'STATE 5 r 3522 3385',
16209 'STATE 5 d 4662 3385',
16210 'STATE 5 s 3385 5351',
16211 'STATE 4 l 3385 5352',
16212 'STATE 4 l 5354 5353',
16213 'STATE 6 n 3385 5334',
16214 'STATE 6 d 4545 5355',
16215 'STATE 6 a 3455 5356',
16216 'STATE 4 t 5357 3385',
16217 'STATE 4 d 5359 5358',
16218 'STATE 6 n 3393 5360',
16219 'STATE 6 l 3385 5232',
16220 'STATE 6 l 3385 3455',
16221 'STATE 3 s 3385 5361',
16222 'STATE 6 a 3455 5362',
16223 'STATE 4 t 3385 3455',
16224 'STATE 5 y 3444 3385',
16225 'STATE 6 i 3385 3444',
16226 'STATE 5 p 3455 5363',
16227 'STATE 5 c 3455 3385',
16228 'STATE 4 l 3455 3444',
16229 'STATE 6 r 3455 3385',
16230 'STATE 4 g 3444 3385',
16231 'STATE 1 # 5365 5364',
16232 'STATE 1 # 5367 5366',
16233 'STATE 4 x 3385 3455',
16234 'STATE 1 o 4727 3385',
16235 'STATE 4 x 3385 5368',
16236 'STATE 5 a 5370 5369',
16237 'STATE 3 s 3455 5371',
16238 'STATE 5 o 5373 5372',
16239 'STATE 2 g 3522 3385',
16240 'STATE 1 t 3399 5374',
16241 'STATE 5 r 5376 5375',
16242 'STATE 5 r 5378 5377',
16243 'STATE 3 n 3455 5379',
16244 'STATE 4 s 3385 5380',
16245 'STATE 1 d 3385 3455',
16246 'STATE 4 d 3455 5381',
16247 'STATE 2 l 3399 5382',
16248 'STATE 1 a 3393 3455',
16249 'STATE 3 h 3455 5383',
16250 'STATE 5 u 5385 5384',
16251 'STATE 6 n 3455 5386',
16252 'STATE 2 e 3455 5387',
16253 'STATE 3 m 3385 3455',
16254 'STATE 3 l 3385 3393',
16255 'STATE 3 a 3385 5388',
16256 'STATE 6 a 3385 5389',
16257 'STATE 1 # 3385 5390',
16258 'STATE 4 t 5392 5391',
16259 'STATE 5 a 4686 5393',
16260 'STATE 3 t 3399 5394',
16261 'STATE 3 m 3455 5395',
16262 'STATE 1 c 3455 5396',
16263 'STATE 6 i 3522 3385',
16264 'STATE 3 s 3455 3385',
16265 'STATE 4 t 3385 5397',
16266 'STATE 6 t 3385 5398',
16267 'STATE 5 y 3385 5399',
16268 'STATE 6 e 3385 5128',
16269 'STATE 6 u 3522 5400',
16270 'STATE 6 i 3385 5401',
16271 'STATE 4 c 3944 5402',
16272 'STATE 6 n 4964 5403',
16273 'STATE 3 b 3455 5404',
16274 'STATE 4 l 5406 5405',
16275 'STATE 4 d 3455 3385',
16276 'STATE 3 h 3385 5407',
16277 'STATE 4 b 5345 5408',
16278 'STATE 3 s 3455 3393',
16279 'STATE 3 l 3455 3385',
16280 'STATE 3 h 3385 5409',
16281 'STATE 6 e 3385 5410',
16282 'STATE 6 r 3444 5411',
16283 'STATE 2 u 3444 5412',
16284 'STATE 3 l 5414 5413',
16285 'STATE 2 s 3494 5415',
16286 'STATE 3 r 3385 5416',
16287 'STATE 4 q 5418 5417',
16288 'STATE 5 e 5420 5419',
16289 'STATE 6 k 3399 5421',
16290 'STATE 3 r 5423 5422',
16291 'STATE 3 l 5425 5424',
16292 'STATE 6 r 3455 5426',
16293 'STATE 2 o 3399 5427',
16294 'STATE 3 c 3393 5428',
16295 'STATE 2 a 3393 3385',
16296 'STATE 2 o 3399 5429',
16297 'STATE 6 i 5334 5430',
16298 'STATE 6 e 3399 5431',
16299 'STATE 1 l 3524 5432',
16300 'STATE 4 p 3399 5433',
16301 'STATE 1 o 3385 5434',
16302 'STATE 4 s 3522 5435',
16303 'STATE 5 i 5437 5436',
16304 'STATE 4 c 5276 4416',
16305 'STATE 5 i 3393 3524',
16306 'STATE 3 r 5439 5438',
16307 'STATE 4 g 3393 5440',
16308 'STATE 6 e 3385 5441',
16309 'STATE 1 c 3385 5442',
16310 'STATE 3 r 3393 5443',
16311 'STATE 1 # 3393 3385',
16312 'STATE 3 c 3455 5444',
16313 'STATE 3 d 3455 5445',
16314 'STATE 3 h 3455 5446',
16315 'STATE 3 d 3455 5447',
16316 'STATE 5 o 3385 5448',
16317 'STATE 6 s 3389 3385',
16318 'STATE 5 v 3385 5449',
16319 'STATE 5 v 3522 5450',
16320 'STATE 5 d 3522 3385',
16321 'STATE 6 e 3385 5451',
16322 'STATE 3 g 3385 5452',
16323 'STATE 6 d 3385 5453',
16324 'STATE 6 z 3385 5454',
16325 'STATE 6 c 3455 5455',
16326 'STATE 3 v 3385 3393',
16327 'STATE 6 s 3393 5456',
16328 'STATE 4 l 5458 5457',
16329 'STATE 4 b 5460 5459',
16330 'STATE 6 a 3444 5461',
16331 'STATE 5 t 4697 5462',
16332 'STATE 2 g 3399 3393',
16333 'STATE 6 o 3399 3393',
16334 'STATE 3 w 3385 5463',
16335 'STATE 2 a 3522 3385',
16336 'STATE 1 i 5465 5464',
16337 'STATE 1 a 3494 5466',
16338 'STATE 5 b 5468 5467',
16339 'STATE 3 r 3393 5469',
16340 'STATE 1 a 3455 5470',
16341 'STATE 6 r 3385 4042',
16342 'STATE 1 i 3385 3522',
16343 'STATE 3 u 3399 5471',
16344 'STATE 5 r 3522 5472',
16345 'STATE 2 a 3399 3455',
16346 'STATE 2 t 5474 5473',
16347 'STATE 3 p 3393 5475',
16348 'STATE 1 r 3455 5476',
16349 'STATE 6 y 3455 3399',
16350 'STATE 1 o 3385 5477',
16351 'STATE 3 s 3455 5478',
16352 'STATE 2 o 3494 3455',
16353 'STATE 4 x 3385 5479',
16354 'STATE 2 n 3494 3385',
16355 'STATE 5 o 5481 5480',
16356 'STATE 6 e 5483 5482',
16357 'STATE 4 h 3385 5484',
16358 'STATE 2 c 3393 3385',
16359 'STATE 3 r 3393 3399',
16360 'STATE 4 s 3385 5485',
16361 'STATE 1 s 3385 3522',
16362 'STATE 2 a 3385 4499',
16363 'STATE 3 k 3455 5486',
16364 'STATE 6 r 3455 3647',
16365 'STATE 3 z 3455 5487',
16366 'STATE 3 h 3455 5488',
16367 'STATE 5 l 3385 5489',
16368 'STATE 6 r 5491 5490',
16369 'STATE 6 i 3385 5134',
16370 'STATE 3 n 3393 3385',
16371 'STATE 6 p 3385 5492',
16372 'STATE 6 n 4311 3385',
16373 'STATE 3 w 3385 5493',
16374 'STATE 3 m 3455 5494',
16375 'STATE 6 r 5496 5495',
16376 'STATE 6 e 3393 5497',
16377 'STATE 3 f 3455 5498',
16378 'STATE 4 t 3385 3444',
16379 'STATE 5 i 3455 3385',
16380 'STATE 6 h 3444 3385',
16381 'STATE 3 l 3393 5499',
16382 'STATE 1 a 5501 5500',
16383 'STATE 4 j 3399 5502',
16384 'STATE 3 r 5504 5503',
16385 'STATE 6 e 3393 3455',
16386 'STATE 5 u 3455 5505',
16387 'STATE 2 s 3385 4833',
16388 'STATE 3 h 3393 5506',
16389 'STATE 6 r 5426 3455',
16390 'STATE 6 e 3494 5507',
16391 'STATE 2 l 3455 3385',
16392 'STATE 4 m 3455 5508',
16393 'STATE 3 h 3455 3385',
16394 'STATE 5 n 3455 5509',
16395 'STATE 6 a 3455 5510',
16396 'STATE 1 e 3385 5511',
16397 'STATE 4 c 3385 5512',
16398 'STATE 2 p 3455 5513',
16399 'STATE 2 u 3455 5514',
16400 'STATE 3 r 3385 5515',
16401 'STATE 3 h 5516 3385',
16402 'STATE 2 c 3385 3393',
16403 'STATE 3 l 3385 5517',
16404 'STATE 5 a 3452 3385',
16405 'STATE 5 v 3385 5518',
16406 'STATE 1 u 3455 5519',
16407 'STATE 3 p 3385 5520',
16408 'STATE 4 h 3385 5521',
16409 'STATE 6 o 3385 5522',
16410 'STATE 5 d 3385 3522',
16411 'STATE 6 y 3385 5523',
16412 'STATE 6 s 5525 5524',
16413 'STATE 6 b 3385 5526',
16414 'STATE 3 l 3385 5527',
16415 'STATE 4 g 3522 3385',
16416 'STATE 3 m 3385 5528',
16417 'STATE 6 n 3455 5529',
16418 'STATE 6 # 5530 3393',
16419 'STATE 2 t 3385 5531',
16420 'STATE 4 v 3522 3385',
16421 'STATE 1 e 5533 5532',
16422 'STATE 4 b 3455 5534',
16423 'STATE 4 p 5535 3455',
16424 'STATE 3 m 3385 5536',
16425 'STATE 6 r 3399 3455',
16426 'STATE 5 r 3399 5537',
16427 'STATE 4 g 3455 3399',
16428 'STATE 5 a 3455 5538',
16429 'STATE 5 o 3399 5539',
16430 'STATE 3 c 5540 3385',
16431 'STATE 1 h 3399 5304',
16432 'STATE 3 l 5035 5541',
16433 'STATE 6 a 3385 5542',
16434 'STATE 4 m 3455 3385',
16435 'STATE 4 m 3385 3393',
16436 'STATE 4 f 3385 5543',
16437 'STATE 6 i 3385 5544',
16438 'STATE 3 n 4913 5545',
16439 'STATE 5 f 3455 5546',
16440 'STATE 5 p 3385 5547',
16441 'STATE 5 g 3522 3385',
16442 'STATE 4 s 3385 5548',
16443 'STATE 6 a 3455 5549',
16444 'STATE 4 c 3455 5356',
16445 'STATE 3 c 3522 4989',
16446 'STATE 6 d 3455 5550',
16447 'STATE 4 p 3522 5551',
16448 'STATE 3 m 3522 3385',
16449 'STATE 3 r 3444 5552',
16450 'STATE 4 x 5554 5553',
16451 'STATE 5 q 3385 5555',
16452 'STATE 2 r 4279 5556',
16453 'STATE 2 d 3399 5557',
16454 'STATE 5 r 3385 3455',
16455 'STATE 5 o 3399 3385',
16456 'STATE 5 u 3399 5558',
16457 'STATE 2 a 3399 5559',
16458 'STATE 2 i 3399 5560',
16459 'STATE 6 o 3385 3399',
16460 'STATE 2 s 3455 5561',
16461 'STATE 4 s 5562 3385',
16462 'STATE 3 h 3385 5563',
16463 'STATE 1 i 3455 5564',
16464 'STATE 2 t 3385 5565',
16465 'STATE 6 n 3455 5566',
16466 'STATE 4 b 3385 5567',
16467 'STATE 4 d 5310 5568',
16468 'STATE 4 b 3385 5569',
16469 'STATE 6 c 3455 5570',
16470 'STATE 3 g 3385 5571',
16471 'STATE 1 a 3444 3393',
16472 'STATE 4 v 4359 3455',
16473 'STATE 2 i 3522 5572',
16474 'STATE 2 h 5574 5573',
16475 'STATE 2 f 3385 5575',
16476 'STATE 4 h 3455 5576',
16477 'STATE 6 r 3399 3385',
16478 'STATE 3 l 3455 5577',
16479 'STATE 5 h 3399 3385',
16480 'STATE 2 g 3455 5578',
16481 'STATE 2 c 5579 3385',
16482 'STATE 4 p 3455 3385',
16483 'STATE 2 e 3455 5580',
16484 'STATE 3 r 3455 5581',
16485 'STATE 3 k 3455 5582',
16486 'STATE 5 s 3385 5583',
16487 'STATE 3 l 3385 4424',
16488 'STATE 3 g 5064 5584',
16489 'STATE 4 g 3385 5585',
16490 'STATE 4 d 3385 5586',
16491 'STATE 2 u 3455 5587',
16492 'STATE 3 h 5589 5588',
16493 'STATE 3 o 3399 5590',
16494 'STATE 2 m 3385 3399',
16495 'STATE 6 s 3399 3455',
16496 'STATE 5 e 4090 3455',
16497 'STATE 2 e 3455 5591',
16498 'STATE 5 c 3522 3385',
16499 'STATE 2 o 3385 3455',
16500 'STATE 1 o 3455 5592',
16501 'STATE 2 r 3455 5593',
16502 'STATE 5 e 3393 3385',
16503 'STATE 4 f 3455 5594',
16504 'STATE 4 t 3385 5595',
16505 'STATE 3 f 3385 5596',
16506 'STATE 2 a 3385 5597',
16507 'STATE 4 c 5599 5598',
16508 'STATE 4 u 3399 4523',
16509 'STATE 3 a 3399 3385',
16510 'STATE 2 n 3455 3385',
16511 'STATE 1 e 3455 5600',
16512 'STATE 2 u 3455 4701',
16513 'STATE 3 c 3455 5601',
16514 'STATE 3 t 3385 5602',
16515 'STATE 6 n 5603 3385',
16516 'STATE 2 o 3522 5276',
16517 'STATE 5 h 5605 5604',
16518 'STATE 6 l 3455 5606',
16519 'STATE 3 k 3455 3385',
16520 'STATE 4 m 3385 5037',
16521 'STATE 3 s 3385 5607',
16522 'STATE 4 n 3987 3393',
16523 'STATE 3 d 5609 5608',
16524 'STATE 1 j 3455 5610',
16525 'STATE 5 e 3494 5611',
16526 'STATE 4 v 3385 5612',
16527 'STATE 4 h 3399 5613',
16528 'STATE 2 i 3399 5614',
16529 'STATE 3 r 3399 5615',
16530 'STATE 6 e 5616 4912',
16531 'STATE 4 n 3385 5617',
16532 'STATE 6 s 3399 5618',
16533 'STATE 1 r 3455 5619',
16534 'STATE 6 o 3399 5620',
16535 'STATE 5 h 3385 3494',
16536 'STATE 3 b 3385 3522',
16537 'STATE 5 n 3399 5621',
16538 'STATE 4 b 3399 3455',
16539 'STATE 2 a 3385 5622',
16540 'STATE 5 u 3399 5623',
16541 'STATE 6 i 3399 3494',
16542 'STATE 1 f 3399 5624',
16543 'STATE 3 r 5626 5625',
16544 'STATE 2 i 5628 5627',
16545 'STATE 2 t 3455 5629',
16546 'STATE 4 p 5631 5630',
16547 'STATE 5 o 3399 5632',
16548 'STATE 2 r 3455 5633',
16549 'STATE 3 g 3455 5634',
16550 'STATE 5 p 3385 3399',
16551 'STATE 6 r 3399 5635',
16552 'STATE 6 r 3455 3399',
16553 'STATE 3 a 3399 5636',
16554 'STATE 5 e 3455 5637',
16555 'STATE 1 a 5639 5638',
16556 'STATE 3 n 5640 3399',
16557 'STATE 6 a 3399 5641',
16558 'STATE 4 b 3455 3399',
16559 'STATE 4 s 3399 3455',
16560 'STATE 4 f 3399 5642',
16561 'STATE 3 l 3399 5643',
16562 'STATE 1 n 3399 5644',
16563 'STATE 5 e 5645 3399',
16564 'STATE 6 r 3399 5646',
16565 'STATE 4 k 3399 3455',
16566 'INDEX 5647 f',
16567 'STATE 4 f 5649 5648',
16568 'PHONE f',
16569 'PHONE epsilon',
16570 'INDEX 5650 g',
16571 'STATE 3 n 5652 5651',
16572 'STATE 4 h 5654 5653',
16573 'STATE 4 # 5656 5655',
16574 'STATE 4 g 5658 5657',
16575 'STATE 5 t 5656 5659',
16576 'STATE 4 s 5656 5660',
16577 'PHONE epsilon',
16578 'STATE 4 e 5662 5661',
16579 'STATE 2 s 5664 5663',
16580 'STATE 3 u 5666 5665',
16581 'STATE 4 e 5668 5667',
16582 'STATE 4 i 5670 5669',
16583 'STATE 5 r 5672 5671',
16584 'STATE 1 # 5656 5673',
16585 'STATE 6 s 5674 5656',
16586 'STATE 3 i 5676 5675',
16587 'STATE 5 # 5656 5677',
16588 'STATE 4 i 5679 5678',
16589 'STATE 6 # 5681 5680',
16590 'STATE 4 y 5683 5682',
16591 'STATE 2 l 5685 5684',
16592 'STATE 3 d 5687 5686',
16593 'STATE 6 # 5689 5688',
16594 'STATE 5 l 5691 5690',
16595 'PHONE g',
16596 'STATE 1 0 5674 5692',
16597 'STATE 5 a 5674 5693',
16598 'STATE 1 t 5695 5694',
16599 'STATE 4 t 5697 5696',
16600 'STATE 6 g 5699 5698',
16601 'STATE 5 # 5687 5700',
16602 'STATE 5 l 5674 5701',
16603 'STATE 4 n 5703 5702',
16604 'STATE 3 g 5674 5704',
16605 'STATE 5 a 5687 5705',
16606 'STATE 5 n 5706 5687',
16607 'STATE 3 g 5708 5707',
16608 'PHONE jh',
16609 'STATE 6 a 5687 5709',
16610 'STATE 3 d 5687 5710',
16611 'STATE 2 b 5674 5656',
16612 'STATE 1 t 5674 5656',
16613 'STATE 1 b 5674 5711',
16614 'STATE 5 e 5674 5656',
16615 'STATE 1 l 5713 5712',
16616 'PHONE f',
16617 'STATE 4 y 5687 5714',
16618 'STATE 2 e 5715 5656',
16619 'STATE 5 l 5674 5716',
16620 'STATE 2 i 5656 5717',
16621 'STATE 5 r 5719 5718',
16622 'STATE 5 s 5687 5720',
16623 'STATE 3 d 5722 5721',
16624 'STATE 5 # 5656 5723',
16625 'STATE 2 l 5687 5724',
16626 'STATE 2 0 5726 5725',
16627 'STATE 6 g 5687 5674',
16628 'STATE 5 # 5687 5727',
16629 'STATE 1 s 5687 5674',
16630 'STATE 3 g 5674 5728',
16631 'STATE 1 c 5687 5729',
16632 'STATE 3 e 5674 5730',
16633 'STATE 2 o 5732 5731',
16634 'STATE 2 a 5733 5656',
16635 'STATE 5 y 5735 5734',
16636 'STATE 6 e 5656 5736',
16637 'STATE 6 e 5687 5737',
16638 'STATE 2 o 5656 5687',
16639 'STATE 5 l 5739 5738',
16640 'STATE 1 f 5674 5740',
16641 'STATE 1 s 5742 5741',
16642 'STATE 3 g 5744 5743',
16643 'STATE 4 r 5674 5745',
16644 'STATE 2 0 5656 5746',
16645 'STATE 1 # 5674 5747',
16646 'STATE 3 g 5749 5748',
16647 'STATE 5 l 5674 5750',
16648 'STATE 5 l 5752 5751',
16649 'STATE 3 d 5687 5753',
16650 'STATE 3 a 5755 5754',
16651 'STATE 2 a 5674 5756',
16652 'STATE 2 a 5656 5757',
16653 'STATE 1 c 5695 5656',
16654 'STATE 5 l 5736 5695',
16655 'STATE 4 h 5759 5758',
16656 'STATE 4 l 5656 5674',
16657 'PHONE k',
16658 'STATE 6 l 5687 5760',
16659 'STATE 6 b 5656 5761',
16660 'STATE 2 a 5762 5674',
16661 'STATE 1 d 5687 5763',
16662 'STATE 2 i 5765 5764',
16663 'STATE 2 i 5687 5656',
16664 'STATE 4 t 5766 5674',
16665 'STATE 1 r 5735 5674',
16666 'STATE 6 n 5687 5767',
16667 'STATE 6 d 5656 5768',
16668 'STATE 6 e 5674 5687',
16669 'STATE 3 c 5674 5769',
16670 'STATE 5 o 5687 5770',
16671 'STATE 5 o 5687 5771',
16672 'STATE 5 i 5674 5772',
16673 'STATE 6 l 5774 5773',
16674 'STATE 6 t 5674 5775',
16675 'STATE 1 m 5687 5674',
16676 'STATE 2 r 5674 5776',
16677 'STATE 5 # 5656 5777',
16678 'STATE 5 e 5656 5674',
16679 'STATE 4 m 5656 5778',
16680 'STATE 5 i 5674 5656',
16681 'STATE 1 # 5687 5779',
16682 'STATE 1 l 5674 5780',
16683 'STATE 6 o 5674 5781',
16684 'STATE 6 s 5783 5782',
16685 'STATE 1 w 5656 5784',
16686 'STATE 1 h 5687 5656',
16687 'STATE 3 a 5674 5785',
16688 'STATE 5 e 5687 5786',
16689 'STATE 6 t 5674 5787',
16690 'STATE 5 v 5674 5788',
16691 'STATE 5 # 5687 5789',
16692 'STATE 5 u 5687 5790',
16693 'STATE 5 t 5792 5791',
16694 'STATE 2 0 5793 5674',
16695 'STATE 3 a 5687 5674',
16696 'STATE 6 s 5795 5794',
16697 'STATE 1 s 5674 5796',
16698 'STATE 1 o 5656 5674',
16699 'STATE 4 b 5656 5797',
16700 'STATE 1 r 5687 5798',
16701 'STATE 6 t 5687 5799',
16702 'STATE 1 v 5687 5800',
16703 'STATE 1 l 5674 5801',
16704 'STATE 2 i 5656 5802',
16705 'STATE 2 o 5656 5803',
16706 'STATE 1 # 5674 5656',
16707 'STATE 4 a 5674 5804',
16708 'STATE 3 i 5806 5805',
16709 'STATE 3 o 5674 5807',
16710 'STATE 5 n 5674 5808',
16711 'STATE 5 n 5810 5809',
16712 'STATE 2 h 5812 5811',
16713 'STATE 1 0 5674 5813',
16714 'STATE 6 a 5687 5674',
16715 'STATE 2 e 5674 5814',
16716 'STATE 3 a 5815 5674',
16717 'STATE 1 h 5674 5816',
16718 'STATE 4 d 5656 5817',
16719 'STATE 5 n 5674 5818',
16720 'STATE 2 o 5687 5819',
16721 'STATE 1 # 5820 5674',
16722 'STATE 1 # 5674 5821',
16723 'STATE 2 e 5687 5656',
16724 'STATE 5 d 5687 5822',
16725 'STATE 4 o 5674 5687',
16726 'STATE 6 # 5757 5674',
16727 'STATE 5 m 5656 5823',
16728 'STATE 6 # 5825 5824',
16729 'STATE 1 r 5687 5674',
16730 'STATE 5 v 5674 5826',
16731 'STATE 6 n 5687 5827',
16732 'STATE 6 s 5829 5828',
16733 'STATE 1 n 5674 5830',
16734 'STATE 2 v 5687 5831',
16735 'STATE 6 g 5674 5832',
16736 'STATE 1 # 5674 5687',
16737 'STATE 1 # 5674 5833',
16738 'STATE 4 f 5656 5834',
16739 'STATE 2 i 5674 5835',
16740 'STATE 6 i 5674 5836',
16741 'STATE 6 i 5674 5687',
16742 'STATE 6 t 5674 5837',
16743 'STATE 2 e 5687 5838',
16744 'STATE 5 s 5656 5839',
16745 'STATE 6 l 5841 5840',
16746 'STATE 2 r 5687 5842',
16747 'STATE 5 f 5674 5843',
16748 'STATE 6 t 5687 5844',
16749 'STATE 6 h 5674 5845',
16750 'STATE 1 j 5674 5846',
16751 'STATE 5 m 5674 5847',
16752 'STATE 6 t 5848 5674',
16753 'STATE 6 l 5674 5849',
16754 'STATE 2 e 5674 5687',
16755 'STATE 4 w 5656 5850',
16756 'STATE 5 e 5656 5687',
16757 'STATE 6 u 5687 5851',
16758 'STATE 2 i 5687 5674',
16759 'STATE 1 r 5687 5852',
16760 'STATE 1 0 5674 5853',
16761 'STATE 2 b 5674 5854',
16762 'STATE 1 c 5674 5855',
16763 'STATE 2 o 5855 5856',
16764 'STATE 6 d 5674 5857',
16765 'STATE 6 g 5674 5687',
16766 'STATE 5 u 5859 5858',
16767 'STATE 1 # 5674 5860',
16768 'STATE 5 n 5674 5687',
16769 'STATE 3 r 5674 5687',
16770 'STATE 6 b 5674 5861',
16771 'STATE 4 p 5656 5862',
16772 'STATE 2 a 5687 5863',
16773 'STATE 1 l 5656 5864',
16774 'STATE 5 a 5674 5865',
16775 'STATE 2 h 5674 5866',
16776 'STATE 5 e 5674 5687',
16777 'STATE 1 # 5687 5867',
16778 'STATE 6 s 5674 5868',
16779 'STATE 1 b 5848 5869',
16780 'PHONE zh',
16781 'STATE 5 m 5687 5870',
16782 'STATE 6 y 5687 5871',
16783 'STATE 5 u 5873 5872',
16784 'STATE 1 # 5674 5874',
16785 'STATE 5 r 5875 5687',
16786 'STATE 6 f 5674 5876',
16787 'STATE 2 s 5674 5687',
16788 'STATE 5 s 5674 5877',
16789 'STATE 5 s 5687 5878',
16790 'STATE 2 b 5674 5879',
16791 'STATE 5 n 5880 5674',
16792 'STATE 2 n 5687 5881',
16793 'STATE 4 o 5674 5882',
16794 'STATE 2 a 5656 5883',
16795 'STATE 2 i 5674 5687',
16796 'STATE 2 a 5656 5674',
16797 'STATE 2 m 5674 5884',
16798 'STATE 1 r 5674 5885',
16799 'STATE 5 r 5674 5886',
16800 'STATE 6 r 5888 5887',
16801 'STATE 1 0 5687 5674',
16802 'STATE 2 0 5890 5889',
16803 'STATE 4 a 5892 5891',
16804 'STATE 6 i 5656 5674',
16805 'STATE 6 n 5894 5893',
16806 'STATE 2 e 5674 5895',
16807 'STATE 6 g 5674 5896',
16808 'STATE 3 a 5898 5897',
16809 'STATE 5 o 5687 5899',
16810 'STATE 3 i 5687 5900',
16811 'STATE 6 m 5687 5901',
16812 'STATE 4 r 5674 5902',
16813 'STATE 1 h 5656 5674',
16814 'STATE 6 r 5656 5903',
16815 'STATE 5 i 5656 5674',
16816 'STATE 3 a 5674 5687',
16817 'STATE 6 m 5674 5904',
16818 'STATE 6 t 5687 5905',
16819 'STATE 5 n 5815 5687',
16820 'STATE 5 a 5674 5906',
16821 'STATE 6 i 5687 5674',
16822 'STATE 6 r 5687 5907',
16823 'STATE 4 l 5909 5908',
16824 'STATE 6 # 5656 5674',
16825 'STATE 5 d 5674 5910',
16826 'STATE 5 o 5687 5911',
16827 'STATE 5 e 5674 5912',
16828 'STATE 6 i 5687 5913',
16829 'STATE 5 e 5656 5914',
16830 'STATE 2 e 5757 5915',
16831 'STATE 5 b 5917 5916',
16832 'STATE 5 n 5919 5918',
16833 'STATE 5 h 5674 5687',
16834 'STATE 6 o 5687 5674',
16835 'STATE 4 u 5674 5656',
16836 'STATE 5 e 5921 5920',
16837 'STATE 6 l 5687 5922',
16838 'STATE 6 b 5674 5687',
16839 'STATE 6 # 5687 5923',
16840 'STATE 6 # 5924 5874',
16841 'STATE 6 s 5674 5925',
16842 'STATE 1 l 5656 5674',
16843 'STATE 5 e 5674 5926',
16844 'STATE 5 a 5687 5927',
16845 'STATE 3 o 5687 5928',
16846 'STATE 6 n 5674 5929',
16847 'STATE 6 a 5674 5930',
16848 'STATE 6 i 5687 5931',
16849 'STATE 3 r 5674 5932',
16850 'STATE 6 m 5674 5933',
16851 'STATE 6 t 5674 5687',
16852 'STATE 3 l 5674 5934',
16853 'STATE 1 # 5674 5935',
16854 'STATE 5 a 5656 5894',
16855 'STATE 6 a 5674 5936',
16856 'STATE 3 i 5687 5674',
16857 'STATE 5 m 5687 5937',
16858 'STATE 1 0 5938 5674',
16859 'STATE 5 b 5687 5674',
16860 'INDEX 5939 h',
16861 'STATE 3 # 5941 5940',
16862 'STATE 3 c 5943 5942',
16863 'STATE 4 a 5945 5944',
16864 'STATE 3 s 5947 5946',
16865 'STATE 4 o 5948 5947',
16866 'STATE 4 o 5945 5949',
16867 'PHONE hh',
16868 'STATE 3 t 5951 5950',
16869 'PHONE epsilon',
16870 'STATE 1 i 5945 5947',
16871 'STATE 4 i 5945 5952',
16872 'STATE 3 p 5954 5953',
16873 'STATE 4 o 5955 5947',
16874 'STATE 4 u 5945 5956',
16875 'STATE 3 g 5958 5957',
16876 'STATE 1 # 5947 5959',
16877 'STATE 1 0 5947 5960',
16878 'STATE 4 y 5945 5961',
16879 'STATE 1 0 5963 5962',
16880 'STATE 1 i 5965 5964',
16881 'STATE 1 h 5966 5947',
16882 'STATE 1 g 5945 5947',
16883 'STATE 4 e 5945 5967',
16884 'STATE 4 l 5947 5968',
16885 'STATE 4 o 5970 5969',
16886 'STATE 4 o 5972 5971',
16887 'STATE 4 o 5945 5973',
16888 'STATE 4 e 5947 5945',
16889 'STATE 4 r 5945 5974',
16890 'STATE 4 # 5947 5975',
16891 'STATE 3 o 5977 5976',
16892 'STATE 3 r 5947 5978',
16893 'STATE 4 a 5980 5979',
16894 'STATE 1 0 5947 5945',
16895 'STATE 4 a 5945 5947',
16896 'STATE 4 l 5945 5947',
16897 'STATE 4 n 5947 5981',
16898 'STATE 3 a 5973 5947',
16899 'STATE 4 a 5945 5982',
16900 'STATE 3 w 5945 5947',
16901 'STATE 4 u 5945 5947',
16902 'STATE 1 0 5947 5983',
16903 'STATE 4 r 5947 5984',
16904 'STATE 4 l 5947 5985',
16905 'STATE 1 n 5945 5947',
16906 'STATE 4 m 5947 5986',
16907 'STATE 4 m 5947 5945',
16908 'STATE 4 s 5947 5987',
16909 'STATE 3 w 5983 5988',
16910 'STATE 3 x 5990 5989',
16911 'STATE 4 t 5947 5991',
16912 'STATE 4 i 5947 5992',
16913 'STATE 4 d 5947 5993',
16914 'STATE 4 a 5947 5945',
16915 'STATE 4 o 5995 5994',
16916 'STATE 3 n 5945 5996',
16917 'STATE 1 s 5945 5997',
16918 'STATE 4 y 5999 5998',
16919 'STATE 1 c 5945 6000',
16920 'STATE 1 h 5992 6001',
16921 'STATE 3 e 5945 6002',
16922 'STATE 3 e 5945 6003',
16923 'STATE 3 z 6005 6004',
16924 'STATE 3 a 5945 5947',
16925 'STATE 3 d 5945 6006',
16926 'STATE 3 d 6008 6007',
16927 'STATE 4 a 5945 6009',
16928 'STATE 3 n 5945 6010',
16929 'STATE 1 u 5945 6011',
16930 'STATE 4 e 5945 6012',
16931 'STATE 4 e 5945 5947',
16932 'STATE 1 o 6013 5945',
16933 'STATE 1 e 5945 6014',
16934 'STATE 4 u 5945 6015',
16935 'STATE 3 r 5947 5945',
16936 'STATE 4 a 6017 6016',
16937 'STATE 1 e 5945 5947',
16938 'STATE 1 # 6019 6018',
16939 'STATE 1 # 5945 6020',
16940 'STATE 1 k 5947 6021',
16941 'STATE 4 i 5945 6022',
16942 'STATE 1 b 5945 6023',
16943 'STATE 3 o 5945 6024',
16944 'STATE 4 e 5945 5979',
16945 'STATE 1 v 5945 6025',
16946 'STATE 1 p 5945 6026',
16947 'STATE 1 m 5947 6027',
16948 'STATE 1 t 5945 6028',
16949 'STATE 3 i 5945 6029',
16950 'STATE 1 i 5945 6030',
16951 'STATE 1 f 5945 6031',
16952 'STATE 1 l 5945 6032',
16953 'STATE 1 d 5945 6033',
16954 'STATE 1 o 5945 6034',
16955 'STATE 3 o 5945 6035',
16956 'STATE 1 g 5945 6036',
16957 'STATE 3 a 5945 6037',
16958 'STATE 3 i 6039 6038',
16959 'STATE 3 m 5945 6040',
16960 'STATE 1 c 5945 6041',
16961 'STATE 1 n 5947 5945',
16962 'STATE 1 r 6042 5945',
16963 'STATE 1 n 5945 6043',
16964 'STATE 3 u 5947 5945',
16965 'STATE 3 e 5945 6044',
16966 'STATE 1 w 5945 6045',
16967 'STATE 1 r 5945 6046',
16968 'STATE 1 a 5945 6047',
16969 'STATE 3 r 5945 6048',
16970 'STATE 1 s 5945 6049',
16971 'STATE 1 m 5945 6002',
16972 'INDEX 6050 i',
16973 'STATE 5 g 6052 6051',
16974 'STATE 4 # 6054 6053',
16975 'STATE 6 # 6056 6055',
16976 'STATE 4 o 6058 6057',
16977 'STATE 3 a 6060 6059',
16978 'STATE 2 # 6062 6061',
16979 'STATE 4 n 6064 6063',
16980 'STATE 4 e 6066 6065',
16981 'STATE 3 t 6068 6067',
16982 'STATE 3 e 6070 6069',
16983 'STATE 2 h 6072 6071',
16984 'STATE 4 n 6074 6073',
16985 'STATE 4 e 6076 6075',
16986 'STATE 4 e 6076 6077',
16987 'STATE 2 # 6077 6078',
16988 'STATE 4 a 6080 6079',
16989 'STATE 2 # 6082 6081',
16990 'STATE 3 s 6084 6083',
16991 'STATE 5 n 6086 6085',
16992 'PHONE iy',
16993 'STATE 2 m 6072 6086',
16994 'STATE 2 k 6072 6087',
16995 'PHONE ay1',
16996 'STATE 4 e 6076 6088',
16997 'STATE 3 s 6090 6089',
16998 'STATE 4 r 6086 6091',
16999 'PHONE iy1',
17000 'PHONE ih1',
17001 'STATE 3 r 6093 6092',
17002 'STATE 3 a 6095 6094',
17003 'STATE 3 c 6097 6096',
17004 'STATE 5 r 6099 6098',
17005 'STATE 5 r 6101 6100',
17006 'STATE 2 # 6103 6102',
17007 'STATE 5 n 6086 6069',
17008 'STATE 5 u 6086 6069',
17009 'PHONE epsilon',
17010 'STATE 2 d 6086 6072',
17011 'STATE 6 e 6105 6104',
17012 'STATE 2 0 6077 6106',
17013 'STATE 6 e 6108 6107',
17014 'STATE 4 a 6110 6109',
17015 'STATE 3 w 6111 6107',
17016 'STATE 2 d 6077 6112',
17017 'STATE 5 e 6114 6113',
17018 'STATE 4 c 6116 6115',
17019 'STATE 3 t 6118 6117',
17020 'STATE 5 t 6069 6119',
17021 'STATE 5 # 6069 6120',
17022 'STATE 3 e 6122 6121',
17023 'STATE 5 w 6086 6123',
17024 'STATE 3 h 6072 6124',
17025 'STATE 5 n 6126 6125',
17026 'STATE 3 g 6086 6127',
17027 'STATE 4 o 6129 6128',
17028 'STATE 2 r 6107 6130',
17029 'STATE 3 e 6072 6131',
17030 'PHONE ih',
17031 'PHONE ax',
17032 'STATE 4 o 6132 6077',
17033 'STATE 3 d 6072 6069',
17034 'STATE 2 o 6107 6133',
17035 'STATE 2 e 6107 6134',
17036 'STATE 4 c 6136 6135',
17037 'STATE 4 v 6138 6137',
17038 'STATE 2 z 6077 6139',
17039 'STATE 5 # 6107 6086',
17040 'STATE 2 # 6141 6140',
17041 'STATE 5 t 6069 6142',
17042 'STATE 6 o 6069 6143',
17043 'STATE 5 s 6145 6144',
17044 'STATE 6 # 6147 6146',
17045 'STATE 2 m 6132 6072',
17046 'STATE 3 d 6149 6148',
17047 'STATE 3 p 6077 6150',
17048 'STATE 5 u 6152 6151',
17049 'STATE 2 l 6154 6153',
17050 'STATE 3 f 6069 6155',
17051 'STATE 4 a 6069 6156',
17052 'STATE 2 o 6132 6069',
17053 'STATE 4 d 6158 6157',
17054 'STATE 2 s 6160 6159',
17055 'PHONE ay',
17056 'STATE 2 a 6107 6161',
17057 'STATE 2 a 6107 6162',
17058 'STATE 4 r 6164 6163',
17059 'STATE 2 # 6166 6165',
17060 'STATE 3 o 6168 6167',
17061 'STATE 3 t 6107 6169',
17062 'STATE 5 a 6171 6170',
17063 'STATE 3 s 6173 6172',
17064 'STATE 3 g 6086 6174',
17065 'STATE 6 # 6086 6175',
17066 'STATE 5 l 6086 6176',
17067 'STATE 5 d 6178 6177',
17068 'STATE 3 f 6072 6179',
17069 'STATE 6 s 6181 6180',
17070 'STATE 3 a 6132 6182',
17071 'STATE 6 e 6076 6183',
17072 'STATE 5 t 6185 6184',
17073 'STATE 3 s 6069 6186',
17074 'STATE 5 r 6188 6187',
17075 'STATE 3 c 6086 6189',
17076 'STATE 3 n 6154 6190',
17077 'PHONE y',
17078 'STATE 5 l 6192 6191',
17079 'STATE 6 r 6086 6077',
17080 'STATE 4 g 6077 6072',
17081 'STATE 3 r 6193 6107',
17082 'STATE 3 r 6195 6194',
17083 'STATE 3 w 6077 6196',
17084 'STATE 2 e 6107 6077',
17085 'STATE 2 u 6107 6197',
17086 'STATE 3 e 6199 6198',
17087 'STATE 6 n 6201 6200',
17088 'STATE 5 # 6107 6202',
17089 'STATE 5 r 6072 6203',
17090 'STATE 6 # 6205 6204',
17091 'STATE 4 r 6206 6086',
17092 'STATE 3 s 6107 6207',
17093 'STATE 5 o 6209 6208',
17094 'STATE 4 n 6086 6210',
17095 'STATE 3 l 6212 6211',
17096 'STATE 5 k 6069 6213',
17097 'STATE 3 d 6072 6214',
17098 'STATE 2 s 6216 6215',
17099 'STATE 5 n 6086 6217',
17100 'STATE 5 w 6219 6218',
17101 'STATE 3 f 6072 6220',
17102 'STATE 6 # 6222 6221',
17103 'STATE 6 i 6077 6223',
17104 'STATE 2 i 6072 6224',
17105 'STATE 3 f 6072 6225',
17106 'STATE 5 s 6184 6226',
17107 'STATE 6 # 6072 6076',
17108 'STATE 6 z 6076 6227',
17109 'STATE 6 a 6076 6228',
17110 'STATE 2 0 6072 6229',
17111 'STATE 3 r 6231 6230',
17112 'STATE 3 g 6086 6069',
17113 'STATE 2 0 6132 6232',
17114 'STATE 3 b 6072 6233',
17115 'STATE 6 e 6072 6234',
17116 'STATE 2 b 6077 6235',
17117 'STATE 6 s 6107 6236',
17118 'STATE 6 t 6107 6237',
17119 'STATE 6 u 6077 6238',
17120 'STATE 2 o 6107 6239',
17121 'STATE 3 o 6241 6240',
17122 'STATE 4 g 6243 6242',
17123 'STATE 3 o 6245 6244',
17124 'STATE 5 a 6107 6246',
17125 'STATE 5 a 6248 6247',
17126 'STATE 5 k 6077 6249',
17127 'STATE 2 # 6251 6250',
17128 'STATE 4 n 6253 6252',
17129 'PHONE aa1',
17130 'STATE 3 e 6076 6254',
17131 'STATE 4 v 6086 6255',
17132 'STATE 4 n 6086 6256',
17133 'STATE 2 t 6072 6086',
17134 'STATE 3 g 6258 6257',
17135 'STATE 6 e 6260 6259',
17136 'STATE 6 i 6069 6261',
17137 'STATE 5 n 6263 6262',
17138 'STATE 2 n 6086 6264',
17139 'STATE 5 # 6069 6265',
17140 'STATE 6 # 6069 6086',
17141 'STATE 5 n 6267 6266',
17142 'STATE 3 v 6086 6268',
17143 'STATE 6 # 6270 6269',
17144 'STATE 3 r 6076 6271',
17145 'STATE 3 l 6273 6272',
17146 'STATE 6 e 6275 6274',
17147 'STATE 3 l 6154 6276',
17148 'STATE 3 s 6069 6277',
17149 'STATE 3 b 6279 6278',
17150 'STATE 6 e 6076 6072',
17151 'STATE 6 n 6077 6280',
17152 'STATE 5 # 6282 6281',
17153 'STATE 2 a 6154 6283',
17154 'STATE 2 p 6132 6069',
17155 'STATE 3 l 6285 6284',
17156 'STATE 6 t 6069 6286',
17157 'STATE 6 i 6132 6287',
17158 'STATE 2 t 6077 6288',
17159 'STATE 2 k 6077 6289',
17160 'STATE 2 e 6107 6290',
17161 'STATE 6 i 6077 6291',
17162 'STATE 2 r 6107 6292',
17163 'STATE 2 # 6294 6293',
17164 'STATE 4 s 6296 6295',
17165 'STATE 5 # 6298 6297',
17166 'STATE 5 h 6300 6299',
17167 'STATE 5 a 6302 6301',
17168 'STATE 5 # 6206 6086',
17169 'STATE 2 # 6304 6303',
17170 'STATE 6 # 6306 6305',
17171 'STATE 6 t 6308 6307',
17172 'STATE 3 e 6072 6309',
17173 'STATE 3 e 6311 6310',
17174 'STATE 4 r 6313 6312',
17175 'STATE 4 c 6315 6314',
17176 'STATE 3 l 6317 6316',
17177 'STATE 3 d 6319 6318',
17178 'STATE 4 s 6320 6086',
17179 'STATE 6 r 6086 6321',
17180 'STATE 3 o 6154 6322',
17181 'STATE 2 r 6086 6323',
17182 'STATE 2 g 6069 6324',
17183 'STATE 5 m 6086 6069',
17184 'STATE 5 s 6069 6325',
17185 'STATE 3 h 6072 6326',
17186 'STATE 6 # 6076 6069',
17187 'STATE 6 s 6086 6327',
17188 'STATE 6 i 6086 6069',
17189 'STATE 5 t 6329 6328',
17190 'STATE 2 f 6086 6330',
17191 'STATE 6 i 6108 6069',
17192 'STATE 2 f 6076 6069',
17193 'STATE 2 p 6072 6331',
17194 'STATE 6 t 6069 6332',
17195 'STATE 2 i 6069 6333',
17196 'STATE 2 l 6069 6072',
17197 'STATE 2 n 6069 6077',
17198 'STATE 2 e 6077 6334',
17199 'STATE 2 o 6069 6335',
17200 'STATE 2 r 6069 6336',
17201 'STATE 5 n 6338 6337',
17202 'STATE 5 n 6108 6076',
17203 'STATE 3 w 6077 6339',
17204 'STATE 3 a 6072 6340',
17205 'STATE 3 h 6341 6069',
17206 'STATE 3 n 6154 6342',
17207 'STATE 3 r 6069 6343',
17208 'STATE 2 g 6069 6154',
17209 'STATE 5 n 6072 6344',
17210 'STATE 3 b 6132 6072',
17211 'STATE 2 d 6107 6345',
17212 'STATE 6 u 6077 6346',
17213 'STATE 2 a 6107 6347',
17214 'STATE 3 l 6077 6348',
17215 'STATE 2 i 6107 6345',
17216 'STATE 2 0 6350 6349',
17217 'STATE 4 g 6352 6351',
17218 'STATE 5 c 6108 6086',
17219 'STATE 5 # 6206 6353',
17220 'STATE 2 r 6355 6354',
17221 'STATE 2 h 6357 6356',
17222 'STATE 5 n 6359 6358',
17223 'STATE 6 # 6086 6360',
17224 'STATE 5 o 6362 6361',
17225 'STATE 3 e 6086 6363',
17226 'STATE 2 0 6072 6364',
17227 'STATE 5 o 6107 6086',
17228 'STATE 3 e 6072 6365',
17229 'STATE 5 o 6367 6366',
17230 'STATE 6 l 6369 6368',
17231 'STATE 3 r 6107 6370',
17232 'STATE 5 h 6372 6371',
17233 'STATE 4 z 6374 6373',
17234 'STATE 6 d 6086 6375',
17235 'STATE 6 s 6377 6376',
17236 'STATE 3 d 6086 6378',
17237 'STATE 4 l 6380 6379',
17238 'STATE 2 # 6072 6381',
17239 'STATE 3 w 6072 6382',
17240 'STATE 2 o 6076 6383',
17241 'STATE 2 o 6385 6384',
17242 'STATE 2 # 6386 6072',
17243 'STATE 6 # 6387 6086',
17244 'STATE 6 n 6086 6388',
17245 'STATE 3 n 6390 6389',
17246 'STATE 6 # 6069 6391',
17247 'STATE 2 p 6072 6392',
17248 'STATE 6 # 6086 6393',
17249 'STATE 3 v 6072 6394',
17250 'STATE 5 # 6086 6395',
17251 'STATE 6 l 6069 6396',
17252 'STATE 3 u 6072 6397',
17253 'STATE 3 c 6399 6398',
17254 'STATE 2 r 6069 6400',
17255 'STATE 6 c 6069 6401',
17256 'STATE 2 c 6072 6069',
17257 'STATE 2 i 6069 6077',
17258 'STATE 3 r 6069 6077',
17259 'STATE 3 r 6069 6402',
17260 'STATE 3 l 6076 6403',
17261 'STATE 3 v 6069 6076',
17262 'STATE 3 b 6077 6404',
17263 'STATE 5 t 6069 6405',
17264 'STATE 2 c 6069 6072',
17265 'STATE 6 a 6154 6069',
17266 'STATE 3 p 6069 6406',
17267 'STATE 5 c 6072 6407',
17268 'STATE 2 h 6107 6077',
17269 'STATE 6 a 6107 6408',
17270 'STATE 2 r 6107 6345',
17271 'STATE 6 l 6077 6409',
17272 'STATE 5 a 6411 6410',
17273 'STATE 4 n 6077 6412',
17274 'STATE 5 a 6414 6413',
17275 'STATE 5 h 6072 6415',
17276 'STATE 2 b 6086 6416',
17277 'STATE 6 # 6418 6417',
17278 'STATE 4 n 6420 6419',
17279 'STATE 2 t 6422 6421',
17280 'STATE 4 s 6132 6423',
17281 'STATE 2 w 6425 6424',
17282 'STATE 6 i 6107 6426',
17283 'STATE 2 h 6072 6086',
17284 'STATE 5 r 6428 6427',
17285 'STATE 3 e 6086 6429',
17286 'STATE 3 p 6431 6430',
17287 'STATE 2 n 6072 6432',
17288 'STATE 5 i 6434 6433',
17289 'STATE 3 e 6436 6435',
17290 'STATE 3 r 6076 6437',
17291 'STATE 6 # 6107 6438',
17292 'STATE 3 g 6107 6439',
17293 'STATE 2 e 6107 6440',
17294 'STATE 3 b 6072 6441',
17295 'STATE 3 m 6442 6077',
17296 'STATE 6 s 6444 6443',
17297 'STATE 6 n 6108 6445',
17298 'STATE 4 t 6446 6072',
17299 'STATE 3 e 6072 6447',
17300 'STATE 4 g 6132 6072',
17301 'STATE 6 l 6107 6072',
17302 'STATE 4 r 6072 6448',
17303 'STATE 2 # 6072 6449',
17304 'STATE 3 r 6451 6450',
17305 'STATE 2 # 6072 6452',
17306 'STATE 2 a 6076 6072',
17307 'STATE 3 n 6454 6453',
17308 'STATE 6 r 6069 6107',
17309 'STATE 6 s 6132 6455',
17310 'STATE 5 e 6086 6077',
17311 'STATE 4 d 6072 6086',
17312 'STATE 3 a 6154 6456',
17313 'STATE 6 u 6069 6457',
17314 'STATE 5 n 6069 6458',
17315 'STATE 2 e 6460 6459',
17316 'STATE 5 # 6462 6461',
17317 'STATE 6 # 6072 6463',
17318 'STATE 2 i 6086 6069',
17319 'STATE 5 u 6465 6464',
17320 'STATE 2 p 6072 6466',
17321 'STATE 3 t 6108 6467',
17322 'STATE 2 i 6108 6468',
17323 'STATE 2 a 6069 6469',
17324 'STATE 6 o 6069 6076',
17325 'STATE 3 z 6069 6470',
17326 'STATE 5 t 6472 6471',
17327 'STATE 3 g 6077 6473',
17328 'STATE 2 i 6475 6474',
17329 'STATE 2 s 6086 6476',
17330 'STATE 5 t 6072 6477',
17331 'STATE 6 o 6077 6478',
17332 'STATE 3 t 6479 6107',
17333 'STATE 5 y 6481 6480',
17334 'STATE 6 # 6483 6482',
17335 'STATE 4 m 6077 6484',
17336 'STATE 5 o 6486 6485',
17337 'STATE 6 # 6076 6487',
17338 'STATE 5 r 6489 6488',
17339 'STATE 2 a 6077 6086',
17340 'STATE 4 n 6491 6490',
17341 'STATE 4 s 6493 6492',
17342 'STATE 6 u 6108 6494',
17343 'STATE 6 # 6076 6495',
17344 'STATE 4 n 6497 6496',
17345 'STATE 4 n 6132 6072',
17346 'STATE 4 t 6132 6072',
17347 'STATE 5 # 6076 6072',
17348 'STATE 5 # 6132 6072',
17349 'STATE 2 r 6108 6086',
17350 'STATE 5 i 6499 6498',
17351 'STATE 2 0 6501 6500',
17352 'STATE 6 # 6077 6502',
17353 'STATE 6 # 6077 6503',
17354 'STATE 2 # 6072 6504',
17355 'STATE 5 o 6086 6072',
17356 'STATE 5 k 6506 6505',
17357 'STATE 6 s 6108 6507',
17358 'STATE 5 i 6076 6508',
17359 'STATE 5 h 6509 6076',
17360 'STATE 3 n 6076 6510',
17361 'STATE 2 n 6069 6511',
17362 'STATE 2 s 6107 6512',
17363 'STATE 3 d 6513 6108',
17364 'STATE 5 t 6515 6514',
17365 'STATE 6 e 6107 6077',
17366 'STATE 2 0 6517 6516',
17367 'STATE 4 n 6519 6518',
17368 'STATE 6 d 6072 6520',
17369 'STATE 6 r 6521 6072',
17370 'STATE 4 b 6523 6522',
17371 'STATE 3 e 6525 6524',
17372 'STATE 3 t 6108 6526',
17373 'STATE 2 e 6108 6527',
17374 'STATE 2 o 6077 6072',
17375 'STATE 2 a 6076 6528',
17376 'STATE 2 l 6107 6529',
17377 'STATE 2 u 6107 6072',
17378 'STATE 6 r 6132 6072',
17379 'STATE 5 h 6072 6530',
17380 'STATE 2 e 6531 6069',
17381 'STATE 2 e 6069 6086',
17382 'STATE 5 r 6154 6532',
17383 'STATE 5 # 6069 6533',
17384 'STATE 6 s 6086 6069',
17385 'STATE 2 o 6069 6086',
17386 'STATE 3 w 6072 6534',
17387 'STATE 2 c 6536 6535',
17388 'STATE 6 # 6086 6069',
17389 'STATE 6 y 6072 6537',
17390 'STATE 3 n 6154 6538',
17391 'STATE 2 s 6072 6069',
17392 'STATE 2 o 6069 6539',
17393 'STATE 2 l 6069 6540',
17394 'STATE 3 s 6076 6541',
17395 'STATE 6 z 6076 6542',
17396 'STATE 3 v 6077 6543',
17397 'STATE 3 c 6462 6544',
17398 'STATE 6 a 6086 6069',
17399 'STATE 3 g 6086 6545',
17400 'STATE 3 r 6069 6546',
17401 'STATE 6 t 6107 6547',
17402 'STATE 6 s 6107 6077',
17403 'STATE 5 h 6549 6548',
17404 'STATE 4 n 6550 6108',
17405 'STATE 6 t 6552 6551',
17406 'STATE 4 k 6107 6553',
17407 'STATE 5 o 6072 6554',
17408 'STATE 4 u 6189 6555',
17409 'STATE 6 # 6076 6556',
17410 'STATE 4 s 6077 6557',
17411 'STATE 6 # 6559 6558',
17412 'STATE 6 e 6132 6072',
17413 'STATE 5 t 6122 6560',
17414 'STATE 6 t 6108 6072',
17415 'STATE 2 h 6072 6561',
17416 'STATE 5 t 6108 6562',
17417 'STATE 6 # 6563 6072',
17418 'STATE 5 f 6077 6564',
17419 'STATE 2 f 6072 6565',
17420 'STATE 2 r 6086 6566',
17421 'STATE 5 # 6568 6567',
17422 'STATE 3 p 6077 6569',
17423 'STATE 3 m 6077 6086',
17424 'STATE 6 i 6077 6107',
17425 'STATE 6 l 6107 6570',
17426 'STATE 2 d 6086 6571',
17427 'STATE 6 t 6086 6072',
17428 'STATE 5 t 6573 6572',
17429 'STATE 2 e 6107 6574',
17430 'STATE 6 z 6108 6575',
17431 'STATE 5 s 6107 6576',
17432 'STATE 2 r 6132 6072',
17433 'STATE 3 t 6107 6076',
17434 'STATE 3 r 6578 6577',
17435 'STATE 3 d 6580 6579',
17436 'STATE 2 n 6108 6581',
17437 'STATE 6 # 6076 6582',
17438 'STATE 6 o 6107 6077',
17439 'STATE 4 g 6584 6583',
17440 'STATE 4 n 6077 6585',
17441 'STATE 4 g 6107 6586',
17442 'STATE 3 s 6588 6587',
17443 'STATE 6 s 6072 6589',
17444 'STATE 2 r 6077 6072',
17445 'STATE 3 t 6072 6590',
17446 'STATE 3 f 6072 6591',
17447 'STATE 3 u 6593 6592',
17448 'STATE 4 d 6072 6076',
17449 'STATE 2 a 6108 6594',
17450 'STATE 2 s 6596 6595',
17451 'STATE 3 t 6076 6597',
17452 'STATE 6 s 6599 6598',
17453 'STATE 5 s 6601 6600',
17454 'STATE 6 # 6602 6069',
17455 'STATE 6 s 6154 6603',
17456 'STATE 6 # 6069 6072',
17457 'STATE 5 l 6069 6604',
17458 'STATE 2 a 6606 6605',
17459 'STATE 6 # 6108 6076',
17460 'STATE 3 t 6069 6607',
17461 'STATE 2 b 6072 6608',
17462 'STATE 2 l 6069 6609',
17463 'STATE 2 a 6611 6610',
17464 'STATE 6 h 6613 6612',
17465 'STATE 3 v 6069 6614',
17466 'STATE 3 f 6077 6076',
17467 'STATE 3 v 6072 6069',
17468 'STATE 3 z 6069 6615',
17469 'STATE 6 i 6072 6110',
17470 'STATE 3 h 6077 6616',
17471 'STATE 5 o 6618 6617',
17472 'STATE 4 g 6072 6619',
17473 'STATE 6 # 6072 6077',
17474 'STATE 4 g 6621 6620',
17475 'STATE 4 v 6623 6622',
17476 'STATE 4 l 6624 6076',
17477 'STATE 5 a 6626 6625',
17478 'STATE 5 i 6628 6627',
17479 'STATE 4 k 6107 6629',
17480 'STATE 4 y 6076 6630',
17481 'STATE 5 u 6632 6631',
17482 'STATE 5 s 6077 6076',
17483 'STATE 2 c 6076 6633',
17484 'STATE 4 n 6076 6634',
17485 'STATE 5 s 6072 6077',
17486 'STATE 4 s 6072 6076',
17487 'STATE 5 i 6072 6635',
17488 'STATE 2 b 6132 6636',
17489 'STATE 2 b 6132 6072',
17490 'STATE 5 u 6638 6637',
17491 'STATE 3 e 6077 6639',
17492 'STATE 2 0 6072 6640',
17493 'STATE 2 # 6641 6072',
17494 'STATE 2 # 6643 6642',
17495 'STATE 6 i 6645 6644',
17496 'STATE 2 n 6077 6646',
17497 'STATE 2 r 6107 6647',
17498 'STATE 6 d 6108 6648',
17499 'STATE 5 t 6077 6649',
17500 'STATE 3 h 6107 6650',
17501 'STATE 2 f 6107 6108',
17502 'STATE 2 c 6652 6651',
17503 'STATE 2 a 6108 6107',
17504 'STATE 2 u 6107 6108',
17505 'STATE 5 c 6654 6653',
17506 'STATE 6 n 6656 6655',
17507 'STATE 6 n 6658 6657',
17508 'STATE 4 d 6660 6659',
17509 'STATE 4 l 6662 6661',
17510 'STATE 3 m 6108 6663',
17511 'STATE 2 u 6086 6069',
17512 'STATE 6 r 6072 6077',
17513 'STATE 6 r 6665 6664',
17514 'STATE 6 r 6077 6666',
17515 'STATE 4 t 6668 6667',
17516 'STATE 4 s 6086 6072',
17517 'STATE 3 s 6108 6669',
17518 'STATE 2 n 6108 6670',
17519 'STATE 3 t 6108 6072',
17520 'STATE 2 s 6072 6671',
17521 'STATE 6 # 6072 6672',
17522 'STATE 3 l 6077 6072',
17523 'STATE 3 f 6674 6673',
17524 'STATE 6 # 6675 6072',
17525 'STATE 5 n 6069 6154',
17526 'STATE 6 i 6069 6676',
17527 'STATE 3 l 6072 6069',
17528 'STATE 6 # 6678 6677',
17529 'STATE 3 n 6154 6679',
17530 'STATE 6 t 6069 6680',
17531 'STATE 3 l 6069 6681',
17532 'STATE 2 n 6069 6682',
17533 'STATE 2 t 6069 6683',
17534 'STATE 3 n 6069 6684',
17535 'STATE 6 b 6069 6076',
17536 'STATE 3 p 6069 6076',
17537 'STATE 6 r 6076 6685',
17538 'STATE 3 c 6687 6686',
17539 'STATE 6 i 6077 6688',
17540 'STATE 4 u 6690 6689',
17541 'STATE 6 # 6076 6691',
17542 'STATE 4 s 6693 6692',
17543 'STATE 4 v 6695 6694',
17544 'STATE 6 n 6107 6696',
17545 'STATE 2 c 6697 6108',
17546 'STATE 3 r 6072 6698',
17547 'STATE 3 u 6076 6699',
17548 'STATE 5 l 6701 6700',
17549 'STATE 6 l 6108 6702',
17550 'STATE 5 d 6704 6703',
17551 'STATE 6 n 6706 6705',
17552 'STATE 4 v 6107 6707',
17553 'STATE 6 t 6709 6708',
17554 'STATE 6 e 6077 6710',
17555 'STATE 6 r 6077 6069',
17556 'STATE 4 s 6072 6711',
17557 'STATE 5 y 6108 6712',
17558 'STATE 5 v 6077 6713',
17559 'STATE 4 l 6076 6714',
17560 'STATE 3 e 6716 6715',
17561 'STATE 6 s 6072 6077',
17562 'STATE 3 m 6077 6717',
17563 'STATE 6 c 6072 6718',
17564 'STATE 3 h 6077 6107',
17565 'STATE 2 e 6072 6719',
17566 'STATE 6 d 6132 6720',
17567 'STATE 5 o 6722 6721',
17568 'STATE 5 h 6076 6107',
17569 'STATE 6 s 6723 6077',
17570 'STATE 6 s 6725 6724',
17571 'STATE 6 n 6727 6726',
17572 'STATE 2 s 6729 6728',
17573 'STATE 2 a 6107 6730',
17574 'STATE 3 m 6731 6107',
17575 'STATE 3 t 6108 6107',
17576 'STATE 3 n 6077 6732',
17577 'STATE 6 i 6069 6077',
17578 'STATE 6 d 6734 6733',
17579 'STATE 2 e 6108 6735',
17580 'STATE 2 s 6737 6736',
17581 'STATE 3 l 6108 6738',
17582 'STATE 4 r 6107 6739',
17583 'STATE 6 o 6072 6132',
17584 'STATE 4 c 6596 6740',
17585 'STATE 2 o 6076 6072',
17586 'STATE 3 g 6108 6741',
17587 'STATE 3 l 6743 6742',
17588 'STATE 3 n 6132 6744',
17589 'STATE 6 l 6072 6077',
17590 'STATE 4 s 6746 6745',
17591 'STATE 2 i 6108 6747',
17592 'STATE 3 r 6108 6748',
17593 'STATE 3 v 6108 6749',
17594 'STATE 2 o 6076 6750',
17595 'STATE 2 0 6072 6751',
17596 'STATE 2 t 6753 6752',
17597 'STATE 2 i 6072 6069',
17598 'STATE 3 r 6076 6069',
17599 'STATE 2 l 6754 6069',
17600 'STATE 5 v 6076 6755',
17601 'STATE 5 f 6076 6756',
17602 'STATE 6 # 6069 6076',
17603 'STATE 6 # 6069 6757',
17604 'STATE 6 t 6069 6758',
17605 'STATE 2 e 6069 6759',
17606 'STATE 3 v 6069 6760',
17607 'STATE 3 v 6154 6069',
17608 'STATE 3 p 6072 6076',
17609 'STATE 3 x 6086 6069',
17610 'STATE 6 a 6069 6086',
17611 'STATE 2 m 6107 6761',
17612 'STATE 6 n 6763 6762',
17613 'STATE 6 # 6069 6764',
17614 'STATE 4 k 6107 6765',
17615 'STATE 2 s 6077 6766',
17616 'STATE 3 f 6077 6767',
17617 'STATE 6 s 6769 6768',
17618 'STATE 3 v 6072 6770',
17619 'STATE 3 r 6108 6580',
17620 'STATE 4 n 6108 6072',
17621 'STATE 2 o 6108 6771',
17622 'STATE 2 a 6077 6076',
17623 'STATE 4 g 6773 6772',
17624 'STATE 4 l 6077 6774',
17625 'STATE 6 n 6776 6775',
17626 'STATE 5 u 6778 6777',
17627 'STATE 4 d 6077 6779',
17628 'STATE 6 # 6076 6780',
17629 'STATE 4 s 6077 6781',
17630 'STATE 4 s 6077 6782',
17631 'STATE 6 r 6784 6783',
17632 'STATE 4 l 6132 6077',
17633 'STATE 5 a 6786 6785',
17634 'STATE 2 f 6108 6787',
17635 'STATE 4 t 6076 6788',
17636 'STATE 6 e 6790 6789',
17637 'STATE 2 r 6076 6563',
17638 'STATE 5 y 6072 6086',
17639 'STATE 2 w 6077 6086',
17640 'STATE 2 a 6086 6791',
17641 'STATE 6 l 6107 6792',
17642 'STATE 3 h 6107 6793',
17643 'STATE 3 g 6086 6794',
17644 'STATE 6 l 6796 6795',
17645 'STATE 2 0 6072 6797',
17646 'STATE 3 d 6107 6077',
17647 'STATE 2 i 6107 6798',
17648 'STATE 2 d 6107 6799',
17649 'STATE 2 e 6801 6800',
17650 'STATE 3 d 6108 6072',
17651 'STATE 3 w 6803 6802',
17652 'STATE 3 t 6077 6107',
17653 'STATE 6 b 6077 6804',
17654 'STATE 2 e 6108 6107',
17655 'STATE 5 i 6077 6805',
17656 'STATE 2 w 6072 6806',
17657 'STATE 4 t 6808 6807',
17658 'STATE 2 w 6072 6809',
17659 'STATE 3 r 6077 6107',
17660 'STATE 6 r 6072 6107',
17661 'STATE 2 e 6107 6108',
17662 'STATE 4 k 6072 6810',
17663 'STATE 4 f 6108 6811',
17664 'STATE 3 l 6072 6812',
17665 'STATE 4 p 6072 6813',
17666 'STATE 6 a 6077 6814',
17667 'STATE 4 t 6077 6815',
17668 'STATE 4 g 6107 6072',
17669 'STATE 2 a 6108 6816',
17670 'STATE 2 e 6072 6817',
17671 'STATE 2 o 6108 6509',
17672 'STATE 2 r 6077 6818',
17673 'STATE 3 v 6072 6819',
17674 'STATE 6 a 6107 6820',
17675 'STATE 3 e 6086 6821',
17676 'STATE 5 # 6069 6822',
17677 'STATE 6 # 6824 6823',
17678 'STATE 6 a 6076 6825',
17679 'STATE 2 t 6076 6826',
17680 'STATE 3 p 6076 6827',
17681 'STATE 6 c 6069 6828',
17682 'STATE 2 f 6069 6829',
17683 'STATE 2 p 6069 6830',
17684 'STATE 3 d 6107 6831',
17685 'STATE 4 k 6833 6832',
17686 'STATE 4 z 6072 6834',
17687 'STATE 6 p 6072 6265',
17688 'STATE 6 s 6836 6835',
17689 'STATE 6 o 6108 6837',
17690 'STATE 2 s 6077 6838',
17691 'STATE 4 k 6840 6839',
17692 'STATE 2 o 6108 6076',
17693 'STATE 3 r 6072 6841',
17694 'STATE 2 c 6108 6107',
17695 'STATE 4 s 6842 6077',
17696 'STATE 6 o 6077 6107',
17697 'STATE 6 e 6072 6843',
17698 'STATE 4 s 6077 6844',
17699 'STATE 4 v 6072 6107',
17700 'STATE 3 v 6846 6845',
17701 'STATE 4 l 6108 6847',
17702 'STATE 4 l 6849 6848',
17703 'STATE 4 v 6723 6850',
17704 'STATE 4 v 6723 6851',
17705 'STATE 3 s 6853 6852',
17706 'STATE 3 l 6077 6854',
17707 'STATE 3 b 6132 6855',
17708 'STATE 5 n 6857 6856',
17709 'STATE 3 g 6077 6858',
17710 'STATE 2 v 6086 6859',
17711 'STATE 2 n 6076 6860',
17712 'STATE 5 c 6077 6861',
17713 'STATE 5 t 6077 6086',
17714 'STATE 3 h 6086 6077',
17715 'STATE 2 # 6077 6862',
17716 'STATE 2 0 6107 6072',
17717 'STATE 3 m 6864 6863',
17718 'STATE 5 h 6866 6865',
17719 'STATE 2 r 6077 6867',
17720 'STATE 3 t 6069 6868',
17721 'STATE 3 r 6077 6869',
17722 'STATE 2 n 6107 6077',
17723 'STATE 6 a 6077 6870',
17724 'STATE 3 n 6108 6077',
17725 'STATE 2 l 6107 6871',
17726 'STATE 5 k 6872 6107',
17727 'STATE 2 l 6107 6873',
17728 'STATE 3 v 6077 6874',
17729 'STATE 6 r 6876 6875',
17730 'STATE 4 s 6072 6877',
17731 'STATE 2 i 6108 6878',
17732 'STATE 3 r 6880 6879',
17733 'STATE 6 n 6077 6881',
17734 'STATE 4 s 6072 6882',
17735 'STATE 3 b 6072 6883',
17736 'STATE 4 l 6885 6884',
17737 'STATE 4 c 6072 6886',
17738 'STATE 3 m 6077 6853',
17739 'STATE 3 m 6072 6887',
17740 'STATE 3 s 6072 6509',
17741 'STATE 2 i 6077 6108',
17742 'STATE 3 b 6072 6888',
17743 'STATE 6 t 6077 6889',
17744 'STATE 3 h 6069 6890',
17745 'STATE 5 n 6069 6891',
17746 'STATE 6 t 6154 6069',
17747 'STATE 5 m 6154 6069',
17748 'STATE 5 b 6076 6892',
17749 'STATE 2 s 6076 6675',
17750 'STATE 2 o 6069 6076',
17751 'STATE 6 n 6069 6679',
17752 'STATE 3 r 6072 6069',
17753 'STATE 3 d 6069 6893',
17754 'STATE 3 n 6107 6894',
17755 'STATE 4 g 6896 6895',
17756 'STATE 5 i 6076 6107',
17757 'STATE 4 m 6077 6897',
17758 'STATE 4 g 6899 6898',
17759 'STATE 4 t 6076 6900',
17760 'STATE 6 e 6902 6901',
17761 'STATE 6 # 6904 6903',
17762 'STATE 6 l 6906 6905',
17763 'STATE 6 w 6069 6907',
17764 'STATE 3 n 6107 6908',
17765 'STATE 6 i 6909 6077',
17766 'STATE 6 a 6077 6072',
17767 'STATE 6 r 6077 6072',
17768 'STATE 5 r 6911 6910',
17769 'STATE 4 b 6072 6912',
17770 'STATE 6 s 6914 6913',
17771 'STATE 3 f 6072 6915',
17772 'STATE 3 w 6072 6077',
17773 'STATE 4 p 6069 6077',
17774 'STATE 4 m 6916 6072',
17775 'STATE 6 r 6918 6917',
17776 'STATE 4 m 6077 6072',
17777 'STATE 3 d 6920 6919',
17778 'STATE 4 l 6108 6077',
17779 'STATE 3 d 6922 6921',
17780 'STATE 3 s 6924 6923',
17781 'STATE 3 l 6077 6925',
17782 'STATE 6 h 6086 6926',
17783 'STATE 5 a 6076 6927',
17784 'STATE 5 s 6077 6928',
17785 'STATE 6 # 6077 6929',
17786 'STATE 3 v 6077 6107',
17787 'STATE 6 b 6107 6077',
17788 'STATE 6 e 6931 6930',
17789 'STATE 2 c 6933 6932',
17790 'STATE 3 t 6077 6934',
17791 'STATE 3 n 6925 6935',
17792 'STATE 3 t 6077 6936',
17793 'STATE 3 l 6077 6937',
17794 'STATE 2 r 6107 6938',
17795 'STATE 2 d 6107 6939',
17796 'STATE 6 n 6940 6731',
17797 'STATE 5 a 6942 6941',
17798 'STATE 4 r 6944 6943',
17799 'STATE 4 k 6107 6945',
17800 'STATE 2 r 6108 6946',
17801 'STATE 2 e 6108 6072',
17802 'STATE 4 d 6948 6947',
17803 'STATE 2 b 6077 6072',
17804 'STATE 4 c 6072 6949',
17805 'STATE 2 i 6950 6072',
17806 'STATE 3 f 6072 6951',
17807 'STATE 3 w 6072 6952',
17808 'STATE 3 s 6072 6953',
17809 'STATE 4 f 6072 6954',
17810 'STATE 3 v 6072 6955',
17811 'STATE 3 d 6957 6956',
17812 'STATE 2 d 6072 6958',
17813 'STATE 5 # 6069 6959',
17814 'STATE 6 # 6072 6960',
17815 'STATE 5 f 6076 6961',
17816 'STATE 2 e 6069 6962',
17817 'STATE 6 l 6107 6963',
17818 'STATE 5 d 6965 6964',
17819 'STATE 5 # 6967 6966',
17820 'STATE 4 g 6077 6968',
17821 'STATE 4 v 6970 6969',
17822 'STATE 2 n 6077 6971',
17823 'STATE 3 h 6108 6972',
17824 'STATE 3 r 6077 6973',
17825 'STATE 3 r 6077 6108',
17826 'STATE 3 r 6975 6974',
17827 'STATE 3 k 6107 6976',
17828 'STATE 6 b 6978 6977',
17829 'STATE 3 r 6108 6979',
17830 'STATE 3 r 6108 6107',
17831 'STATE 6 r 6069 6980',
17832 'STATE 5 h 6107 6077',
17833 'STATE 5 l 6982 6981',
17834 'STATE 4 s 6077 6983',
17835 'STATE 6 a 6985 6984',
17836 'STATE 3 s 6077 6986',
17837 'STATE 4 s 6077 6072',
17838 'STATE 3 m 6988 6987',
17839 'STATE 3 d 6108 6077',
17840 'STATE 3 b 6108 6989',
17841 'STATE 4 m 6132 6990',
17842 'STATE 3 m 6992 6991',
17843 'STATE 4 m 6077 6108',
17844 'STATE 5 l 6107 6077',
17845 'STATE 6 t 6077 6107',
17846 'STATE 6 i 6077 6993',
17847 'STATE 6 a 6077 6994',
17848 'STATE 6 l 6069 6107',
17849 'STATE 2 h 6072 6995',
17850 'STATE 4 l 6072 6086',
17851 'STATE 5 t 6077 6072',
17852 'STATE 2 a 6086 6077',
17853 'STATE 5 y 6108 6996',
17854 'STATE 3 t 6108 6997',
17855 'STATE 6 o 6108 6998',
17856 'STATE 6 e 6069 6077',
17857 'STATE 3 d 6077 6108',
17858 'STATE 2 p 6108 6999',
17859 'STATE 2 t 6077 7000',
17860 'STATE 3 f 6077 7001',
17861 'STATE 2 h 6909 6107',
17862 'STATE 2 t 6077 6107',
17863 'STATE 3 f 6107 7002',
17864 'STATE 6 n 6077 7003',
17865 'STATE 3 r 6107 7004',
17866 'STATE 6 k 7006 7005',
17867 'STATE 3 d 6086 7007',
17868 'STATE 4 t 7009 7008',
17869 'STATE 3 t 6108 7010',
17870 'STATE 2 l 6107 6108',
17871 'STATE 2 i 6132 6108',
17872 'STATE 4 t 6072 6589',
17873 'STATE 3 c 6072 6108',
17874 'STATE 2 r 6076 7011',
17875 'STATE 3 s 7013 7012',
17876 'STATE 6 y 6072 7014',
17877 'STATE 4 k 6072 6988',
17878 'STATE 3 w 6072 7015',
17879 'STATE 2 l 6072 7016',
17880 'STATE 2 n 6072 6076',
17881 'STATE 6 r 7018 7017',
17882 'STATE 2 b 6069 7019',
17883 'STATE 6 s 6072 6069',
17884 'STATE 2 y 6076 7020',
17885 'STATE 2 o 6069 7021',
17886 'STATE 2 n 6077 7022',
17887 'STATE 5 i 7024 7023',
17888 'STATE 6 a 7026 7025',
17889 'STATE 5 n 7028 7027',
17890 'STATE 2 e 6107 7029',
17891 'STATE 5 i 7031 7030',
17892 'STATE 6 r 7033 7032',
17893 'STATE 2 r 6072 6077',
17894 'STATE 2 g 6107 7034',
17895 'STATE 4 n 6076 6108',
17896 'STATE 2 e 6108 6077',
17897 'STATE 6 m 6107 7035',
17898 'STATE 6 e 6107 7036',
17899 'STATE 2 a 6107 7037',
17900 'STATE 6 n 7039 7038',
17901 'STATE 2 s 6086 7040',
17902 'STATE 2 s 6108 7041',
17903 'STATE 2 l 6107 6077',
17904 'STATE 4 k 6442 7042',
17905 'STATE 4 l 6077 7043',
17906 'STATE 3 c 6077 7044',
17907 'STATE 5 c 7045 6077',
17908 'STATE 4 n 6077 7046',
17909 'STATE 6 l 6107 7047',
17910 'STATE 6 o 6077 7048',
17911 'STATE 4 n 6072 6077',
17912 'STATE 3 d 6988 7049',
17913 'STATE 3 m 6072 6108',
17914 'STATE 6 l 7051 7050',
17915 'STATE 6 s 6072 7052',
17916 'STATE 3 m 6077 6069',
17917 'STATE 6 i 6107 6072',
17918 'STATE 5 z 6072 7053',
17919 'STATE 3 m 6076 7054',
17920 'STATE 2 o 6108 6107',
17921 'STATE 3 m 6107 7055',
17922 'STATE 6 n 7056 6107',
17923 'STATE 2 q 6077 7057',
17924 'STATE 6 p 6077 7058',
17925 'STATE 2 e 6107 7059',
17926 'STATE 6 r 6072 7060',
17927 'STATE 6 r 6107 7061',
17928 'STATE 6 z 6076 7062',
17929 'STATE 4 c 6107 6077',
17930 'STATE 6 m 6072 7063',
17931 'STATE 2 a 6108 7064',
17932 'STATE 3 l 7066 7065',
17933 'STATE 2 a 6108 7067',
17934 'STATE 3 d 6069 7068',
17935 'STATE 4 s 6077 7069',
17936 'STATE 4 d 6072 6077',
17937 'STATE 3 f 6072 6916',
17938 'STATE 2 e 6132 6072',
17939 'STATE 3 f 6072 7070',
17940 'STATE 6 n 7072 7071',
17941 'STATE 2 # 6077 7073',
17942 'STATE 2 0 7074 6069',
17943 'STATE 5 c 6076 7075',
17944 'STATE 2 i 6069 7076',
17945 'STATE 2 a 6107 7077',
17946 'STATE 4 x 6107 7078',
17947 'STATE 6 # 6076 7079',
17948 'STATE 2 s 6077 7080',
17949 'STATE 2 r 6108 7081',
17950 'STATE 5 r 6108 7082',
17951 'STATE 6 o 7084 7083',
17952 'STATE 2 n 6107 7085',
17953 'STATE 5 u 6108 6077',
17954 'STATE 3 u 7087 7086',
17955 'STATE 4 s 7089 7088',
17956 'STATE 4 s 6072 7090',
17957 'STATE 6 t 6108 6907',
17958 'STATE 3 d 6107 7091',
17959 'STATE 6 m 6077 6107',
17960 'STATE 2 o 6107 7092',
17961 'STATE 2 l 7094 7093',
17962 'STATE 2 a 7096 7095',
17963 'STATE 4 t 6108 7097',
17964 'STATE 2 a 6108 7098',
17965 'STATE 3 d 7100 7099',
17966 'STATE 6 e 7102 7101',
17967 'STATE 3 m 6077 7103',
17968 'STATE 6 e 6077 6069',
17969 'STATE 5 l 6069 6077',
17970 'STATE 4 q 6501 7104',
17971 'STATE 6 # 6072 7105',
17972 'STATE 3 p 6072 7106',
17973 'STATE 3 f 7108 7107',
17974 'STATE 3 v 6072 7109',
17975 'STATE 4 h 6108 7110',
17976 'STATE 4 d 6072 7111',
17977 'STATE 3 r 6107 6773',
17978 'STATE 2 e 6107 7112',
17979 'STATE 2 i 6108 6107',
17980 'STATE 3 l 6077 7113',
17981 'STATE 6 o 6077 7114',
17982 'STATE 3 l 6107 6108',
17983 'STATE 3 d 6107 7115',
17984 'STATE 3 p 6107 6069',
17985 'STATE 6 m 7117 7116',
17986 'STATE 2 e 6072 6107',
17987 'STATE 3 r 6072 7118',
17988 'STATE 3 u 6086 6132',
17989 'STATE 2 l 6077 6076',
17990 'STATE 4 d 6072 7119',
17991 'STATE 3 h 6069 7120',
17992 'STATE 6 l 7122 7121',
17993 'STATE 2 e 6076 7123',
17994 'STATE 2 # 6072 7124',
17995 'STATE 3 g 6077 7125',
17996 'STATE 2 e 6077 7126',
17997 'STATE 5 n 6069 7127',
17998 'STATE 3 p 6076 7128',
17999 'STATE 2 n 6069 7129',
18000 'STATE 3 t 6107 7130',
18001 'STATE 4 n 7132 7131',
18002 'STATE 6 e 7134 7133',
18003 'STATE 3 u 6077 7135',
18004 'STATE 3 l 6076 6077',
18005 'STATE 5 s 7137 7136',
18006 'STATE 6 a 6161 7138',
18007 'STATE 3 s 6069 6077',
18008 'STATE 2 r 6107 7139',
18009 'STATE 4 v 7141 7140',
18010 'STATE 2 g 6072 7142',
18011 'STATE 6 u 6108 7143',
18012 'STATE 2 p 6077 6108',
18013 'STATE 4 m 6076 6108',
18014 'STATE 6 e 6107 7144',
18015 'STATE 2 i 6107 7145',
18016 'STATE 4 y 6108 7146',
18017 'STATE 3 l 6108 6069',
18018 'STATE 3 r 6108 7147',
18019 'STATE 4 t 6108 6069',
18020 'STATE 3 m 6108 6072',
18021 'STATE 3 m 6108 7148',
18022 'STATE 4 z 7150 7149',
18023 'STATE 4 f 7151 6077',
18024 'STATE 3 d 7152 6077',
18025 'STATE 4 n 6077 7153',
18026 'STATE 6 i 7155 7154',
18027 'STATE 4 s 6077 7156',
18028 'STATE 6 l 6077 7157',
18029 'STATE 3 k 7159 7158',
18030 'STATE 3 c 6077 7160',
18031 'STATE 6 n 6108 6077',
18032 'STATE 4 v 6072 7161',
18033 'STATE 4 l 6069 6077',
18034 'STATE 5 i 6076 7162',
18035 'STATE 6 s 6107 7163',
18036 'STATE 6 i 6077 7164',
18037 'STATE 6 t 6077 6072',
18038 'STATE 3 p 6107 6077',
18039 'STATE 6 e 6108 7165',
18040 'STATE 4 d 6108 7166',
18041 'STATE 4 s 6072 7167',
18042 'STATE 2 p 6072 7168',
18043 'STATE 2 a 6069 7169',
18044 'STATE 3 v 6077 7170',
18045 'STATE 3 f 6108 6077',
18046 'STATE 3 m 6108 7171',
18047 'STATE 6 d 6072 6077',
18048 'STATE 3 r 6077 6072',
18049 'STATE 3 r 6072 6077',
18050 'STATE 6 o 6069 6072',
18051 'STATE 2 n 6076 7172',
18052 'STATE 2 s 7173 6069',
18053 'STATE 2 l 6107 7174',
18054 'STATE 3 u 7176 7175',
18055 'STATE 5 k 6077 7177',
18056 'STATE 6 z 6108 7178',
18057 'STATE 4 v 6107 7179',
18058 'STATE 4 d 6077 7180',
18059 'STATE 5 m 6077 7181',
18060 'STATE 6 # 6077 6107',
18061 'STATE 2 n 6077 7182',
18062 'STATE 2 i 6107 7183',
18063 'STATE 2 c 6072 7184',
18064 'STATE 3 g 6077 6072',
18065 'STATE 4 s 6086 6108',
18066 'STATE 4 m 7186 7185',
18067 'STATE 6 i 6107 7187',
18068 'STATE 3 n 6077 7188',
18069 'STATE 2 c 7190 7189',
18070 'STATE 2 n 6108 7191',
18071 'STATE 3 g 6108 7192',
18072 'STATE 5 h 7194 7193',
18073 'STATE 3 p 6069 6077',
18074 'STATE 6 u 6108 6077',
18075 'STATE 4 s 6077 6108',
18076 'STATE 4 s 6077 7195',
18077 'STATE 6 a 6132 7196',
18078 'STATE 4 b 6072 6077',
18079 'STATE 6 r 6077 7197',
18080 'STATE 6 a 6077 7198',
18081 'STATE 6 n 6077 7199',
18082 'STATE 4 l 6077 6108',
18083 'STATE 4 t 7201 7200',
18084 'STATE 3 f 6072 6077',
18085 'STATE 5 o 6108 7202',
18086 'STATE 2 o 6107 6077',
18087 'STATE 2 k 6077 7203',
18088 'STATE 2 a 6108 7204',
18089 'STATE 4 c 6108 6072',
18090 'STATE 2 s 6072 7205',
18091 'STATE 4 n 6072 7206',
18092 'STATE 3 p 6069 7207',
18093 'STATE 3 p 6077 7208',
18094 'STATE 3 u 6072 7209',
18095 'STATE 2 m 6076 7210',
18096 'STATE 3 h 6069 6072',
18097 'STATE 3 v 6107 7211',
18098 'STATE 5 m 7213 7212',
18099 'STATE 2 q 7215 7214',
18100 'STATE 6 k 6077 7216',
18101 'STATE 6 o 7218 7217',
18102 'STATE 4 f 6108 7219',
18103 'STATE 2 a 6077 7220',
18104 'STATE 6 b 6108 7221',
18105 'STATE 3 s 6072 7222',
18106 'STATE 2 l 6107 7223',
18107 'STATE 4 f 6069 7224',
18108 'STATE 3 u 7226 7225',
18109 'STATE 6 t 6069 6108',
18110 'STATE 3 l 6077 6107',
18111 'STATE 3 t 6077 7227',
18112 'STATE 3 l 6108 7228',
18113 'STATE 3 l 6077 6108',
18114 'STATE 2 e 6108 7229',
18115 'STATE 3 n 6108 7230',
18116 'STATE 5 y 6550 7231',
18117 'STATE 3 n 6069 7232',
18118 'STATE 3 t 6072 7233',
18119 'STATE 4 t 6072 7234',
18120 'STATE 6 c 6108 6077',
18121 'STATE 3 k 6077 7235',
18122 'STATE 6 t 6077 7236',
18123 'STATE 4 j 6072 7237',
18124 'STATE 3 t 6072 6069',
18125 'STATE 6 n 6072 7238',
18126 'STATE 2 c 6077 7239',
18127 'STATE 4 n 7241 7240',
18128 'STATE 3 w 6072 7242',
18129 'STATE 3 f 6072 7243',
18130 'STATE 3 r 6076 7201',
18131 'STATE 4 m 6077 7244',
18132 'STATE 2 c 6076 7245',
18133 'STATE 3 h 6076 7246',
18134 'STATE 2 r 6107 7247',
18135 'STATE 3 h 7249 7248',
18136 'STATE 6 a 7250 6077',
18137 'STATE 4 t 7252 7251',
18138 'STATE 5 t 6077 7253',
18139 'STATE 2 u 7255 7254',
18140 'STATE 6 t 7257 7256',
18141 'STATE 4 t 6077 7258',
18142 'STATE 4 t 6108 7259',
18143 'STATE 3 w 6077 7260',
18144 'STATE 6 o 6077 7261',
18145 'STATE 3 l 6072 6077',
18146 'STATE 2 h 6107 7262',
18147 'STATE 2 w 6072 7263',
18148 'STATE 3 h 7265 7264',
18149 'STATE 4 n 6108 6086',
18150 'STATE 2 e 6077 7266',
18151 'STATE 4 s 6077 7267',
18152 'STATE 4 d 6108 7268',
18153 'STATE 4 p 6108 7269',
18154 'STATE 6 a 6077 7270',
18155 'STATE 4 s 6077 7271',
18156 'STATE 3 r 6072 7272',
18157 'STATE 4 b 6108 6077',
18158 'STATE 3 h 6077 7273',
18159 'STATE 3 w 6077 7274',
18160 'STATE 3 w 6072 7275',
18161 'STATE 5 a 6072 7276',
18162 'STATE 2 s 6077 6442',
18163 'STATE 2 i 7096 7277',
18164 'STATE 6 l 7279 7278',
18165 'STATE 4 c 6108 7280',
18166 'STATE 3 h 6108 7166',
18167 'STATE 3 c 6077 7281',
18168 'STATE 2 r 6076 7282',
18169 'STATE 2 h 6076 7283',
18170 'STATE 2 p 6107 7284',
18171 'STATE 4 q 7286 7285',
18172 'STATE 5 u 6108 7287',
18173 'STATE 2 a 6108 6077',
18174 'STATE 2 o 6069 7288',
18175 'STATE 2 c 6108 6086',
18176 'STATE 4 p 6077 7289',
18177 'STATE 3 u 7291 7290',
18178 'STATE 3 n 6077 7292',
18179 'STATE 6 a 7294 7293',
18180 'STATE 3 b 6077 7295',
18181 'STATE 4 s 6077 7296',
18182 'STATE 3 c 6077 7297',
18183 'STATE 6 # 6072 7298',
18184 'STATE 3 f 6077 7299',
18185 'STATE 3 s 6107 7300',
18186 'STATE 4 s 6072 7301',
18187 'STATE 2 t 6072 7302',
18188 'STATE 4 z 6072 6077',
18189 'STATE 3 r 7303 6107',
18190 'STATE 3 m 6108 7304',
18191 'STATE 2 p 6108 7305',
18192 'STATE 2 i 6072 7306',
18193 'STATE 6 o 6077 7307',
18194 'STATE 3 s 6072 7308',
18195 'STATE 3 s 6072 7155',
18196 'STATE 6 b 6077 7309',
18197 'STATE 4 n 6069 7310',
18198 'STATE 3 s 6072 7311',
18199 'STATE 6 a 6072 7312',
18200 'STATE 3 u 7314 7313',
18201 'STATE 6 t 6108 7315',
18202 'STATE 3 t 6108 6069',
18203 'STATE 3 u 6072 7316',
18204 'STATE 4 n 7318 7317',
18205 'STATE 3 s 6076 7319',
18206 'STATE 6 d 7321 7320',
18207 'STATE 3 f 6077 6107',
18208 'STATE 3 g 7323 7322',
18209 'STATE 6 i 6077 6076',
18210 'STATE 4 d 6108 7324',
18211 'STATE 5 # 6108 7325',
18212 'STATE 5 l 6077 7326',
18213 'STATE 5 c 7328 7327',
18214 'STATE 2 q 6077 7329',
18215 'STATE 5 # 7330 6108',
18216 'STATE 4 v 7332 7331',
18217 'STATE 4 f 6108 7333',
18218 'STATE 3 t 6077 7334',
18219 'STATE 2 n 6069 7335',
18220 'STATE 3 t 6108 6855',
18221 'STATE 6 s 6072 7336',
18222 'STATE 5 u 6076 6077',
18223 'STATE 3 t 6107 7337',
18224 'STATE 3 f 6072 7338',
18225 'STATE 2 o 7340 7339',
18226 'STATE 2 u 6107 6077',
18227 'STATE 3 n 6108 7341',
18228 'STATE 2 u 6108 7342',
18229 'STATE 4 t 6072 6108',
18230 'STATE 5 v 6077 7343',
18231 'STATE 6 d 6108 6077',
18232 'STATE 3 l 6077 7344',
18233 'STATE 3 l 6077 7345',
18234 'STATE 6 n 6108 7346',
18235 'STATE 4 f 6072 7347',
18236 'STATE 2 p 6072 7348',
18237 'STATE 2 g 6072 6069',
18238 'STATE 2 r 6108 6077',
18239 'STATE 4 b 7350 7349',
18240 'STATE 3 h 6072 7351',
18241 'STATE 6 t 7353 7352',
18242 'STATE 2 i 6108 7354',
18243 'STATE 3 r 6076 7355',
18244 'STATE 2 l 6076 7356',
18245 'STATE 6 i 7358 7357',
18246 'STATE 2 c 6077 7359',
18247 'STATE 2 w 6077 7360',
18248 'STATE 2 g 6077 7361',
18249 'STATE 5 # 6077 7362',
18250 'STATE 2 a 7364 7363',
18251 'STATE 2 i 6108 7365',
18252 'STATE 5 s 6108 7366',
18253 'STATE 3 b 6077 7367',
18254 'STATE 4 b 6108 7368',
18255 'STATE 3 t 6107 7369',
18256 'STATE 3 b 6076 7370',
18257 'STATE 2 a 6077 7371',
18258 'STATE 2 s 6077 7372',
18259 'STATE 3 m 6072 7373',
18260 'STATE 2 d 6107 7374',
18261 'STATE 2 a 6108 7375',
18262 'STATE 4 b 6108 7376',
18263 'STATE 4 l 6072 6108',
18264 'STATE 3 r 7378 7377',
18265 'STATE 2 i 6108 7379',
18266 'STATE 3 m 7380 6077',
18267 'STATE 3 v 6077 7381',
18268 'STATE 6 f 6077 7382',
18269 'STATE 3 r 6072 6108',
18270 'STATE 4 t 7384 7383',
18271 'STATE 3 m 6069 7385',
18272 'STATE 3 h 6077 7386',
18273 'STATE 2 e 6077 6108',
18274 'STATE 4 d 7388 7387',
18275 'STATE 3 m 6072 7161',
18276 'STATE 3 n 6072 6077',
18277 'STATE 3 p 6072 7389',
18278 'STATE 6 s 6076 6069',
18279 'STATE 2 d 6076 7390',
18280 'STATE 2 i 7392 7391',
18281 'STATE 4 z 6076 7393',
18282 'STATE 6 i 6077 7394',
18283 'STATE 4 s 7395 6077',
18284 'STATE 5 s 6108 6790',
18285 'STATE 4 t 6108 6077',
18286 'STATE 2 p 6077 7396',
18287 'STATE 3 t 6108 7397',
18288 'STATE 2 e 6077 7398',
18289 'STATE 5 # 6108 6077',
18290 'STATE 3 l 6077 7399',
18291 'STATE 4 f 7401 7400',
18292 'STATE 6 l 6077 7402',
18293 'STATE 3 u 6076 7403',
18294 'STATE 4 v 6077 7404',
18295 'STATE 2 o 6077 7405',
18296 'STATE 2 e 6077 7406',
18297 'STATE 3 w 6077 6107',
18298 'STATE 2 i 6108 7407',
18299 'STATE 4 p 6077 7408',
18300 'STATE 3 t 6108 7409',
18301 'STATE 6 r 6108 7410',
18302 'STATE 3 t 6108 7411',
18303 'STATE 4 t 7412 6077',
18304 'STATE 6 i 6072 6077',
18305 'STATE 6 s 6108 6077',
18306 'STATE 4 l 6072 6076',
18307 'STATE 5 h 6076 6072',
18308 'STATE 4 k 6072 7413',
18309 'STATE 4 f 7415 7414',
18310 'STATE 4 c 7416 6077',
18311 'STATE 3 r 6108 6077',
18312 'STATE 3 e 6076 7417',
18313 'STATE 2 g 6076 7418',
18314 'STATE 2 a 7420 7419',
18315 'STATE 6 a 7422 7421',
18316 'STATE 5 t 6077 7423',
18317 'STATE 2 r 7424 6108',
18318 'STATE 2 t 6077 7425',
18319 'STATE 3 x 6108 7426',
18320 'STATE 6 o 6108 7427',
18321 'STATE 6 i 6077 7428',
18322 'STATE 3 p 7429 6077',
18323 'STATE 6 v 7431 7430',
18324 'STATE 2 n 6077 7432',
18325 'STATE 3 d 6107 6108',
18326 'STATE 2 i 6077 7433',
18327 'STATE 2 q 6108 7434',
18328 'STATE 2 e 6076 7435',
18329 'STATE 6 i 6072 7436',
18330 'STATE 2 l 6108 7437',
18331 'STATE 6 l 6108 7438',
18332 'STATE 2 u 6069 7439',
18333 'STATE 6 c 6077 6108',
18334 'STATE 4 n 6108 7440',
18335 'STATE 6 u 6069 6077',
18336 'STATE 2 n 6108 7441',
18337 'STATE 2 n 6077 7442',
18338 'STATE 2 o 6077 6108',
18339 'STATE 3 d 6077 6072',
18340 'STATE 2 t 6072 7443',
18341 'STATE 2 t 6076 7444',
18342 'STATE 6 e 7446 7445',
18343 'STATE 5 t 7448 7447',
18344 'STATE 5 c 6077 7449',
18345 'STATE 4 t 6107 7450',
18346 'STATE 3 c 7452 7451',
18347 'STATE 5 l 6077 6108',
18348 'STATE 2 c 6077 7089',
18349 'STATE 6 o 7454 7453',
18350 'STATE 3 r 6077 7455',
18351 'STATE 6 h 6077 7456',
18352 'PHONE ae1',
18353 'STATE 6 s 7458 7457',
18354 'STATE 4 t 6108 6072',
18355 'STATE 6 c 7459 6108',
18356 'STATE 3 d 6076 6077',
18357 'STATE 3 m 6077 7460',
18358 'STATE 4 l 6077 6076',
18359 'STATE 3 l 7462 7461',
18360 'STATE 3 d 6108 7463',
18361 'STATE 4 n 7465 7464',
18362 'STATE 6 v 6108 7466',
18363 'STATE 3 n 6108 7467',
18364 'STATE 4 t 7469 7468',
18365 'STATE 4 m 6077 7470',
18366 'STATE 2 p 6076 7471',
18367 'STATE 2 f 6069 6076',
18368 'STATE 5 z 7473 7472',
18369 'STATE 4 b 7475 7474',
18370 'STATE 4 s 7477 7476',
18371 'STATE 3 t 6077 7478',
18372 'STATE 5 t 7480 7479',
18373 'STATE 4 d 6077 7159',
18374 'STATE 2 l 7452 7481',
18375 'STATE 4 p 6108 6077',
18376 'STATE 2 g 6077 7482',
18377 'STATE 2 e 6108 7483',
18378 'STATE 3 m 6077 7484',
18379 'STATE 6 t 6077 7485',
18380 'STATE 4 t 7487 7486',
18381 'STATE 4 t 7489 7488',
18382 'STATE 3 c 7491 7490',
18383 'STATE 4 m 6077 7492',
18384 'STATE 2 g 6072 7493',
18385 'STATE 2 b 6072 6077',
18386 'STATE 2 r 6108 7494',
18387 'STATE 6 m 6077 7495',
18388 'STATE 6 i 6108 7496',
18389 'STATE 6 d 6077 7497',
18390 'STATE 3 l 6108 7096',
18391 'STATE 6 a 6108 7498',
18392 'STATE 6 c 6108 7499',
18393 'STATE 4 p 6108 7500',
18394 'STATE 2 n 6076 6072',
18395 'STATE 5 u 7502 7501',
18396 'STATE 6 o 6076 6077',
18397 'STATE 3 t 7504 7503',
18398 'STATE 5 l 6108 6077',
18399 'STATE 5 # 7506 7505',
18400 'STATE 5 # 7508 7507',
18401 'STATE 6 s 6108 7509',
18402 'STATE 4 s 7511 7510',
18403 'STATE 3 n 6108 7512',
18404 'STATE 4 t 7514 7513',
18405 'STATE 2 e 7516 7515',
18406 'STATE 5 s 7190 6077',
18407 'STATE 3 b 6077 6916',
18408 'STATE 3 r 6077 7517',
18409 'STATE 4 h 6069 7518',
18410 'STATE 2 e 6077 7410',
18411 'STATE 4 n 7520 7519',
18412 'STATE 2 e 6076 6072',
18413 'STATE 2 g 6077 6108',
18414 'STATE 2 a 6077 6108',
18415 'STATE 4 p 6077 7521',
18416 'STATE 3 r 6077 7522',
18417 'STATE 4 k 6072 7523',
18418 'STATE 2 a 6108 7524',
18419 'STATE 6 v 6108 7250',
18420 'STATE 3 v 6077 7525',
18421 'STATE 2 o 6076 7526',
18422 'STATE 2 s 6072 6108',
18423 'STATE 2 r 6072 7527',
18424 'STATE 2 o 7529 7528',
18425 'STATE 4 t 6108 7530',
18426 'STATE 3 v 6077 7531',
18427 'STATE 2 s 6077 7532',
18428 'STATE 4 b 6108 7533',
18429 'STATE 4 d 6108 7534',
18430 'STATE 3 r 7536 7535',
18431 'STATE 3 x 6108 6077',
18432 'STATE 3 v 6077 7537',
18433 'STATE 6 e 6108 7538',
18434 'STATE 3 n 6069 6108',
18435 'STATE 3 v 6077 6108',
18436 'STATE 3 m 6077 7539',
18437 'STATE 5 r 6076 6077',
18438 'STATE 3 l 6077 7540',
18439 'STATE 3 m 6077 7541',
18440 'STATE 2 n 6077 6108',
18441 'STATE 3 r 6077 7542',
18442 'STATE 4 l 6108 7543',
18443 'STATE 2 d 6077 7544',
18444 'STATE 3 l 6108 7545',
18445 'STATE 2 n 6077 7546',
18446 'STATE 3 l 6072 7547',
18447 'STATE 3 p 6108 7548',
18448 'STATE 2 r 6108 7549',
18449 'STATE 4 s 6077 7550',
18450 'STATE 2 l 6108 7551',
18451 'STATE 6 h 7553 7552',
18452 'STATE 5 t 7555 7554',
18453 'STATE 4 f 6108 7556',
18454 'STATE 5 l 7558 7557',
18455 'STATE 4 t 6072 7559',
18456 'STATE 4 d 6108 7560',
18457 'STATE 4 l 6108 7561',
18458 'STATE 3 t 6108 7562',
18459 'STATE 5 s 6077 6108',
18460 'STATE 3 r 7563 6108',
18461 'STATE 4 b 6108 7564',
18462 'STATE 4 s 7565 6077',
18463 'STATE 3 k 7567 7566',
18464 'STATE 6 u 6077 7568',
18465 'STATE 4 d 6077 7569',
18466 'STATE 4 m 6108 6069',
18467 'STATE 3 f 6077 6818',
18468 'STATE 2 e 7122 6077',
18469 'STATE 6 r 6077 7570',
18470 'STATE 2 o 6108 7571',
18471 'STATE 6 n 6108 7572',
18472 'STATE 4 n 6077 7573',
18473 'STATE 2 s 6077 7574',
18474 'STATE 3 l 6072 7575',
18475 'STATE 5 r 7577 7576',
18476 'STATE 5 c 6077 7536',
18477 'STATE 3 s 6108 7578',
18478 'STATE 4 s 6108 6077',
18479 'STATE 6 s 6108 7579',
18480 'STATE 5 r 6108 7580',
18481 'STATE 4 l 6077 7581',
18482 'STATE 4 l 6077 7582',
18483 'STATE 6 d 6108 7583',
18484 'STATE 4 t 6108 6076',
18485 'STATE 6 a 6077 6107',
18486 'STATE 6 o 6077 6108',
18487 'STATE 5 s 6108 7584',
18488 'STATE 2 c 6077 7585',
18489 'STATE 5 # 7587 7586',
18490 'STATE 2 c 7366 6077',
18491 'STATE 3 d 6077 7588',
18492 'STATE 6 l 7590 7589',
18493 'STATE 6 e 6077 6072',
18494 'STATE 3 n 6072 7591',
18495 'STATE 3 t 6069 7592',
18496 'STATE 2 s 6108 7593',
18497 'STATE 3 r 7595 7594',
18498 'STATE 4 n 6077 6072',
18499 'STATE 2 e 7597 7596',
18500 'STATE 6 o 7598 6108',
18501 'STATE 4 d 6108 7599',
18502 'STATE 2 t 6077 7600',
18503 'STATE 2 l 6108 7601',
18504 'STATE 3 r 7013 7602',
18505 'STATE 5 l 6108 6069',
18506 'STATE 3 c 6108 7603',
18507 'STATE 6 # 6077 7604',
18508 'STATE 5 k 6077 6902',
18509 'STATE 5 f 6108 7605',
18510 'STATE 3 t 7607 7606',
18511 'STATE 3 n 6077 7608',
18512 'STATE 6 b 6077 7609',
18513 'STATE 3 s 6077 6069',
18514 'STATE 4 l 6072 7610',
18515 'STATE 3 r 6108 7611',
18516 'STATE 3 h 6077 6108',
18517 'STATE 2 l 6108 7612',
18518 'STATE 4 c 6108 7613',
18519 'STATE 4 d 7615 7614',
18520 'STATE 3 l 7617 7616',
18521 'STATE 4 p 6077 6108',
18522 'STATE 5 c 6108 7618',
18523 'STATE 2 s 6077 6108',
18524 'STATE 2 u 6108 7619',
18525 'STATE 4 p 6108 6132',
18526 'STATE 4 t 7621 7620',
18527 'STATE 5 p 6077 6108',
18528 'STATE 6 e 6077 7622',
18529 'STATE 3 d 6077 7623',
18530 'STATE 2 t 6077 7624',
18531 'STATE 3 l 6077 7625',
18532 'STATE 3 h 6077 7626',
18533 'STATE 3 c 6072 7627',
18534 'STATE 6 w 6077 6069',
18535 'STATE 3 h 6108 7628',
18536 'STATE 6 t 6108 6077',
18537 'STATE 4 s 7630 7629',
18538 'STATE 5 t 6077 7631',
18539 'STATE 6 r 6108 7632',
18540 'STATE 4 s 7633 6077',
18541 'STATE 3 f 6077 7634',
18542 'STATE 4 m 6077 7635',
18543 'STATE 3 x 6108 7636',
18544 'STATE 5 c 6077 7637',
18545 'STATE 5 s 6077 7638',
18546 'STATE 3 p 6077 7639',
18547 'STATE 2 s 6077 7517',
18548 'STATE 6 e 6108 6077',
18549 'STATE 4 l 7410 7640',
18550 'STATE 3 r 6072 7641',
18551 'STATE 2 e 6108 7166',
18552 'STATE 3 s 7643 7642',
18553 'STATE 3 r 7645 7644',
18554 'STATE 3 b 6077 7646',
18555 'STATE 5 # 7648 7647',
18556 'STATE 6 # 6108 7649',
18557 'STATE 3 t 6077 7650',
18558 'STATE 2 o 7652 7651',
18559 'STATE 6 # 7475 7653',
18560 'STATE 5 u 6077 7654',
18561 'STATE 5 n 6077 7655',
18562 'STATE 2 i 6902 7656',
18563 'STATE 2 n 6077 7657',
18564 'STATE 4 d 6108 6072',
18565 'STATE 2 r 7659 7658',
18566 'STATE 2 r 6077 6108',
18567 'STATE 5 # 7661 7660',
18568 'STATE 2 h 6077 7662',
18569 'STATE 2 r 6108 7663',
18570 'STATE 3 p 6077 7664',
18571 'STATE 4 l 6108 7665',
18572 'STATE 5 # 6077 6108',
18573 'STATE 3 l 7555 7666',
18574 'STATE 2 r 7388 7667',
18575 'STATE 5 t 6077 6108',
18576 'STATE 3 m 6077 7668',
18577 'STATE 5 z 6077 6108',
18578 'STATE 3 s 6077 7669',
18579 'STATE 2 y 6108 7670',
18580 'STATE 3 l 6077 7671',
18581 'STATE 2 c 6077 7672',
18582 'STATE 3 r 7652 7673',
18583 'STATE 3 t 7675 7674',
18584 'STATE 3 b 6077 7676',
18585 'STATE 5 c 6076 6077',
18586 'STATE 2 u 6108 7677',
18587 'STATE 3 d 7563 7678',
18588 'STATE 3 s 6108 7152',
18589 'STATE 3 d 6077 7679',
18590 'STATE 3 n 7555 6077',
18591 'STATE 6 l 6077 7159',
18592 'STATE 3 c 6077 7680',
18593 'STATE 2 r 6077 7681',
18594 'STATE 6 c 6077 7682',
18595 'STATE 2 u 7684 7683',
18596 'STATE 3 t 6076 7685',
18597 'STATE 3 n 6108 7686',
18598 'STATE 6 # 6108 7687',
18599 'STATE 2 l 6077 7688',
18600 'STATE 2 g 6077 7600',
18601 'STATE 3 n 6108 7689',
18602 'STATE 3 m 6108 7690',
18603 'STATE 2 n 6077 7691',
18604 'STATE 2 l 6077 7692',
18605 'STATE 3 m 6077 6108',
18606 'STATE 2 l 7452 7693',
18607 'STATE 5 # 7695 7694',
18608 'STATE 3 n 6108 7696',
18609 'STATE 6 o 7698 7697',
18610 'STATE 6 s 6108 6069',
18611 'STATE 2 y 6108 7699',
18612 'STATE 5 t 7701 7700',
18613 'STATE 4 t 6077 7702',
18614 'STATE 6 a 6108 6077',
18615 'STATE 3 b 7704 7703',
18616 'STATE 4 l 7706 7705',
18617 'STATE 6 # 6108 6077',
18618 'STATE 4 t 6077 6108',
18619 'STATE 4 t 7707 6077',
18620 'STATE 3 w 6077 7708',
18621 'STATE 5 c 6077 6108',
18622 'STATE 2 r 6077 7709',
18623 'STATE 3 r 7424 7710',
18624 'STATE 3 t 6108 7711',
18625 'STATE 3 b 6108 6077',
18626 'STATE 3 n 6077 7712',
18627 'STATE 2 o 6108 7713',
18628 'STATE 3 t 7714 6077',
18629 'STATE 3 c 7716 7715',
18630 'STATE 3 m 6108 6077',
18631 'STATE 3 s 6077 7717',
18632 'STATE 3 d 6077 7718',
18633 'STATE 6 a 6108 7719',
18634 'STATE 3 s 6077 7720',
18635 'STATE 2 n 7721 6077',
18636 'STATE 2 b 6108 6077',
18637 'STATE 2 n 6108 6077',
18638 'STATE 3 k 6077 7722',
18639 'STATE 2 s 6108 7424',
18640 'STATE 3 k 6077 7723',
18641 'STATE 3 t 7725 7724',
18642 'STATE 3 v 6108 6077',
18643 'STATE 3 x 6077 7726',
18644 'STATE 3 g 6077 6108',
18645 'STATE 2 b 6108 7727',
18646 'STATE 3 p 6077 7728',
18647 'STATE 2 u 6077 7729',
18648 'STATE 2 n 6077 7730',
18649 'STATE 4 s 6902 6077',
18650 'STATE 5 l 7732 7731',
18651 'STATE 6 s 6108 7733',
18652 'STATE 3 n 6077 7734',
18653 'STATE 2 t 6077 6108',
18654 'STATE 3 t 6077 7735',
18655 'STATE 3 b 6077 7736',
18656 'STATE 3 l 6077 7737',
18657 'STATE 3 s 6077 7190',
18658 'STATE 5 t 6108 6077',
18659 'STATE 2 s 7738 6077',
18660 'STATE 3 f 6108 7739',
18661 'STATE 3 t 7691 6077',
18662 'STATE 2 n 7740 6934',
18663 'STATE 6 r 6108 6077',
18664 'INDEX 7741 j',
18665 'STATE 3 # 7743 7742',
18666 'STATE 4 a 7745 7744',
18667 'PHONE jh',
18668 'STATE 3 n 7743 7746',
18669 'STATE 3 o 7748 7747',
18670 'STATE 3 d 7743 7749',
18671 'STATE 3 a 7743 7750',
18672 'PHONE y',
18673 'STATE 4 i 7743 7751',
18674 'STATE 3 e 7748 7752',
18675 'STATE 4 o 7754 7753',
18676 'STATE 3 u 7748 7743',
18677 'STATE 4 e 7743 7755',
18678 'STATE 3 s 7757 7756',
18679 'STATE 4 u 7743 7758',
18680 'STATE 3 b 7748 7743',
18681 'PHONE epsilon',
18682 'STATE 3 o 7757 7759',
18683 'STATE 4 k 7757 7760',
18684 'STATE 4 d 7757 7761',
18685 'STATE 3 e 7757 7743',
18686 'INDEX 7762 k',
18687 'STATE 4 n 7764 7763',
18688 'STATE 4 k 7766 7765',
18689 'STATE 1 0 7766 7767',
18690 'PHONE k',
18691 'PHONE epsilon',
18692 'STATE 1 n 7766 7765',
18693 'INDEX 7768 l',
18694 'STATE 4 l 7770 7769',
18695 'STATE 4 e 7772 7771',
18696 'STATE 5 # 7774 7773',
18697 'STATE 6 g 7776 7775',
18698 'STATE 3 b 7778 7777',
18699 'STATE 6 # 7774 7779',
18700 'PHONE epsilon',
18701 'STATE 4 k 7781 7780',
18702 'STATE 4 i 7783 7782',
18703 'STATE 5 # 7785 7784',
18704 'STATE 5 # 7787 7786',
18705 'STATE 2 t 7774 7788',
18706 'STATE 3 l 7790 7789',
18707 'STATE 3 a 7792 7791',
18708 'PHONE l',
18709 'STATE 3 l 7782 7793',
18710 'STATE 3 t 7795 7794',
18711 'STATE 3 l 7782 7796',
18712 'STATE 2 # 7782 7797',
18713 'PHONE ax-l',
18714 'STATE 6 k 7774 7798',
18715 'STATE 4 m 7800 7799',
18716 'STATE 6 0 7782 7801',
18717 'STATE 3 o 7802 7782',
18718 'STATE 2 w 7774 7803',
18719 'STATE 3 b 7787 7804',
18720 'STATE 6 # 7806 7805',
18721 'STATE 5 y 7782 7807',
18722 'STATE 3 a 7782 7808',
18723 'STATE 5 s 7787 7809',
18724 'STATE 3 a 7774 7810',
18725 'STATE 4 # 7812 7811',
18726 'STATE 3 a 7814 7813',
18727 'STATE 4 u 7815 7782',
18728 'STATE 2 f 7774 7816',
18729 'STATE 2 t 7774 7817',
18730 'STATE 3 g 7787 7818',
18731 'STATE 3 d 7820 7819',
18732 'STATE 5 y 7782 7821',
18733 'STATE 6 s 7782 7822',
18734 'STATE 3 i 7782 7823',
18735 'STATE 5 d 7787 7824',
18736 'STATE 6 l 7825 7774',
18737 'STATE 3 u 7827 7826',
18738 'STATE 3 d 7787 7828',
18739 'STATE 3 o 7829 7782',
18740 'STATE 5 # 7774 7830',
18741 'STATE 2 e 7831 7782',
18742 'STATE 5 # 7774 7782',
18743 'STATE 5 # 7774 7832',
18744 'STATE 3 t 7834 7833',
18745 'STATE 3 g 7836 7835',
18746 'STATE 6 s 7782 7837',
18747 'STATE 3 l 7782 7838',
18748 'STATE 5 r 7840 7839',
18749 'STATE 3 o 7782 7841',
18750 'STATE 5 y 7782 7842',
18751 'STATE 2 c 7782 7774',
18752 'STATE 4 f 7844 7843',
18753 'STATE 5 # 7845 7782',
18754 'STATE 3 t 7787 7846',
18755 'STATE 2 c 7774 7782',
18756 'STATE 5 a 7782 7847',
18757 'STATE 5 m 7782 7848',
18758 'STATE 5 a 7782 7849',
18759 'STATE 2 z 7787 7850',
18760 'STATE 2 r 7782 7851',
18761 'STATE 3 p 7853 7852',
18762 'STATE 2 # 7782 7854',
18763 'STATE 2 d 7787 7855',
18764 'STATE 3 i 7782 7856',
18765 'STATE 6 g 7782 7857',
18766 'STATE 2 i 7787 7858',
18767 'STATE 3 e 7782 7859',
18768 'STATE 2 a 7787 7860',
18769 'STATE 4 v 7862 7861',
18770 'STATE 2 h 7863 7782',
18771 'STATE 4 t 7864 7782',
18772 'STATE 3 g 7787 7865',
18773 'STATE 2 c 7774 7866',
18774 'STATE 5 l 7867 7782',
18775 'STATE 5 o 7782 7868',
18776 'STATE 3 p 7787 7869',
18777 'STATE 2 s 7782 7787',
18778 'STATE 3 k 7871 7870',
18779 'STATE 2 p 7873 7872',
18780 'STATE 5 c 7782 7874',
18781 'STATE 6 a 7787 7875',
18782 'STATE 3 a 7782 7876',
18783 'STATE 5 t 7782 7877',
18784 'STATE 2 s 7782 7878',
18785 'STATE 3 y 7782 7879',
18786 'STATE 2 u 7787 7880',
18787 'STATE 4 n 7829 7782',
18788 'STATE 3 a 7881 7782',
18789 'STATE 3 a 7774 7782',
18790 'STATE 2 a 7774 7782',
18791 'STATE 3 a 7782 7882',
18792 'STATE 2 b 7774 7881',
18793 'PHONE y',
18794 'STATE 2 f 7774 7883',
18795 'STATE 3 d 7885 7884',
18796 'STATE 3 z 7787 7782',
18797 'STATE 2 # 7782 7886',
18798 'STATE 5 c 7787 7782',
18799 'STATE 5 m 7782 7787',
18800 'STATE 6 s 7782 7887',
18801 'STATE 2 n 7787 7782',
18802 'STATE 3 e 7782 7888',
18803 'STATE 2 n 7787 7889',
18804 'STATE 2 u 7787 7782',
18805 'STATE 3 u 7782 7890',
18806 'STATE 6 s 7782 7891',
18807 'STATE 2 h 7774 7782',
18808 'STATE 3 e 7782 7892',
18809 'STATE 2 h 7774 7893',
18810 'STATE 3 f 7787 7894',
18811 'STATE 2 d 7787 7782',
18812 'STATE 6 s 7782 7895',
18813 'STATE 6 o 7787 7896',
18814 'STATE 3 o 7782 7897',
18815 'STATE 5 s 7787 7898',
18816 'STATE 3 r 7900 7899',
18817 'STATE 5 t 7782 7901',
18818 'STATE 3 i 7782 7902',
18819 'STATE 2 b 7774 7782',
18820 'STATE 3 s 7782 7903',
18821 'STATE 5 b 7787 7782',
18822 'STATE 6 a 7787 7904',
18823 'STATE 5 s 7906 7905',
18824 'STATE 5 d 7787 7907',
18825 'STATE 3 w 7782 7908',
18826 'STATE 2 a 7782 7787',
18827 'STATE 2 m 7782 7909',
18828 'STATE 2 c 7911 7910',
18829 'STATE 3 c 7912 7782',
18830 'STATE 6 e 7787 7913',
18831 'STATE 5 d 7915 7914',
18832 'STATE 3 y 7782 7916',
18833 'STATE 5 m 7787 7917',
18834 'STATE 3 s 7918 7787',
18835 'STATE 5 m 7782 7919',
18836 'STATE 3 u 7782 7920',
18837 'STATE 3 h 7787 7782',
18838 'STATE 2 # 7782 7787',
18839 'STATE 2 n 7782 7787',
18840 'STATE 5 r 7921 7782',
18841 'STATE 3 u 7782 7922',
18842 'STATE 3 u 7782 7923',
18843 'STATE 5 b 7787 7924',
18844 'STATE 2 i 7782 7787',
18845 'STATE 2 b 7782 7925',
18846 'STATE 3 o 7782 7926',
18847 'STATE 3 s 7851 7927',
18848 'STATE 3 w 7782 7928',
18849 'STATE 3 r 7782 7929',
18850 'STATE 6 e 7787 7930',
18851 'STATE 5 r 7787 7782',
18852 'STATE 3 h 7782 7931',
18853 'STATE 3 g 7933 7932',
18854 'STATE 3 r 7782 7934',
18855 'STATE 3 w 7782 7787',
18856 'STATE 2 t 7787 7782',
18857 'STATE 3 r 7782 7935',
18858 'STATE 3 d 7937 7936',
18859 'STATE 2 a 7782 7938',
18860 'STATE 2 n 7787 7939',
18861 'STATE 3 y 7782 7929',
18862 'STATE 2 c 7911 7940',
18863 'STATE 2 n 7782 7941',
18864 'STATE 2 e 7782 7942',
18865 'STATE 3 d 7787 7943',
18866 'STATE 3 f 7945 7944',
18867 'STATE 2 d 7782 7787',
18868 'STATE 2 n 7787 7946',
18869 'STATE 3 k 7787 7947',
18870 'STATE 3 p 7948 7782',
18871 'STATE 2 f 7782 7787',
18872 'STATE 2 i 7787 7782',
18873 'STATE 3 g 7787 7949',
18874 'STATE 2 p 7782 7787',
18875 'STATE 2 f 7787 7950',
18876 'STATE 2 z 7787 7951',
18877 'STATE 3 p 7787 7952',
18878 'STATE 3 c 7787 7782',
18879 'INDEX 7953 m',
18880 'STATE 4 m 7955 7954',
18881 'STATE 4 c 7957 7956',
18882 'PHONE epsilon',
18883 'STATE 3 s 7959 7958',
18884 'STATE 2 0 7961 7960',
18885 'STATE 4 l 7960 7962',
18886 'STATE 4 # 7964 7963',
18887 'PHONE m',
18888 'STATE 5 e 7966 7965',
18889 'STATE 3 h 7967 7960',
18890 'STATE 4 s 7964 7968',
18891 'PHONE ax-m',
18892 'STATE 5 i 7970 7969',
18893 'STATE 6 l 7970 7971',
18894 'STATE 2 t 7972 7960',
18895 'STATE 5 r 7973 7960',
18896 'PHONE m-ax',
18897 'PHONE m-ae1',
18898 'STATE 6 n 7970 7969',
18899 'STATE 6 0 7964 7960',
18900 'STATE 4 e 7974 7960',
18901 'STATE 2 e 7960 7964',
18902 'INDEX 7975 n',
18903 'STATE 4 g 7977 7976',
18904 'STATE 4 n 7979 7978',
18905 'STATE 5 # 7981 7980',
18906 'STATE 4 k 7983 7982',
18907 'STATE 2 m 7985 7984',
18908 'STATE 5 e 7987 7986',
18909 'PHONE ng',
18910 'STATE 4 c 7989 7988',
18911 'STATE 6 m 7991 7990',
18912 'STATE 6 s 7985 7992',
18913 'PHONE epsilon',
18914 'STATE 5 i 7994 7993',
18915 'STATE 6 r 7996 7995',
18916 'STATE 4 q 7998 7997',
18917 'STATE 5 t 7981 7999',
18918 'STATE 5 n 8001 8000',
18919 'PHONE n',
18920 'STATE 5 i 7985 8002',
18921 'STATE 5 r 8004 8003',
18922 'STATE 2 # 7991 8005',
18923 'STATE 6 # 7991 8006',
18924 'STATE 2 s 7991 8007',
18925 'STATE 4 x 7981 7991',
18926 'STATE 2 # 7991 8008',
18927 'STATE 5 k 7981 8009',
18928 'STATE 6 y 7981 8010',
18929 'STATE 2 # 7991 7981',
18930 'STATE 2 y 7985 8011',
18931 'STATE 6 g 7991 8012',
18932 'STATE 6 a 7991 8013',
18933 'STATE 6 b 7991 8014',
18934 'STATE 6 s 7991 8015',
18935 'STATE 2 r 7981 8016',
18936 'STATE 6 e 7981 7991',
18937 'STATE 5 e 7991 8017',
18938 'STATE 5 i 7981 8018',
18939 'STATE 2 # 7985 8019',
18940 'STATE 5 y 7991 7981',
18941 'STATE 6 o 7991 7981',
18942 'STATE 6 a 7991 8020',
18943 'STATE 2 l 8022 8021',
18944 'STATE 2 h 7981 8023',
18945 'STATE 5 # 7981 8024',
18946 'STATE 6 p 7991 7981',
18947 'STATE 2 i 7985 8025',
18948 'STATE 2 m 7981 8026',
18949 'STATE 6 l 8028 8027',
18950 'STATE 6 n 7981 8029',
18951 'STATE 2 n 7981 8030',
18952 'STATE 5 i 7991 8031',
18953 'STATE 2 b 8032 7985',
18954 'STATE 2 l 7981 8033',
18955 'STATE 6 o 7991 8034',
18956 'STATE 2 v 7991 7981',
18957 'STATE 6 l 7981 7991',
18958 'STATE 2 f 7981 8035',
18959 'STATE 5 y 7991 8036',
18960 'STATE 6 # 8037 7985',
18961 'STATE 2 b 7981 8038',
18962 'STATE 6 a 7991 8039',
18963 'STATE 2 w 7981 8040',
18964 'STATE 5 h 8042 8041',
18965 'STATE 5 e 7991 7985',
18966 'STATE 2 v 7981 8043',
18967 'STATE 2 t 7991 8044',
18968 'STATE 2 g 7991 7981',
18969 'STATE 6 # 8046 8045',
18970 'STATE 6 e 7991 8047',
18971 'STATE 6 n 8048 7991',
18972 'STATE 2 r 7991 8049',
18973 'STATE 6 l 8051 8050',
18974 'STATE 5 a 7981 8052',
18975 'STATE 2 s 7981 7991',
18976 'STATE 2 r 7981 7991',
18977 'STATE 6 m 7981 8053',
18978 'STATE 2 d 7981 8054',
18979 'STATE 5 a 7991 7981',
18980 'STATE 2 i 7991 8055',
18981 'STATE 6 d 7991 8056',
18982 'STATE 6 s 7991 8057',
18983 'STATE 2 r 7991 7981',
18984 'STATE 2 # 7991 8058',
18985 'STATE 2 r 8059 7991',
18986 'STATE 6 n 7981 7991',
18987 'STATE 6 i 7991 8060',
18988 'STATE 5 o 7981 7991',
18989 'INDEX 8061 o',
18990 'STATE 4 r 8063 8062',
18991 'STATE 4 # 8065 8064',
18992 'STATE 1 0 8067 8066',
18993 'STATE 3 o 8069 8068',
18994 'STATE 3 o 8071 8070',
18995 'STATE 1 # 8073 8072',
18996 'STATE 3 w 8075 8074',
18997 'STATE 4 o 8077 8076',
18998 'STATE 4 d 8079 8078',
18999 'STATE 3 a 8081 8080',
19000 'PHONE uw1',
19001 'STATE 5 # 8083 8082',
19002 'STATE 3 o 8085 8084',
19003 'STATE 3 c 8087 8086',
19004 'PHONE epsilon',
19005 'STATE 4 u 8089 8088',
19006 'STATE 3 c 8090 8075',
19007 'STATE 4 k 8092 8091',
19008 'STATE 2 l 8094 8093',
19009 'STATE 3 g 8096 8095',
19010 'PHONE aw1',
19011 'STATE 3 w 8098 8097',
19012 'STATE 3 c 8100 8099',
19013 'STATE 2 s 8100 8101',
19014 'STATE 2 d 8100 8102',
19015 'STATE 5 r 8104 8103',
19016 'STATE 5 r 8105 8100',
19017 'STATE 4 n 8107 8106',
19018 'STATE 5 s 8109 8108',
19019 'STATE 5 r 8096 8075',
19020 'STATE 2 f 8111 8110',
19021 'STATE 1 s 8113 8112',
19022 'STATE 2 f 8071 8114',
19023 'PHONE ah1',
19024 'STATE 3 d 8096 8115',
19025 'PHONE ow',
19026 'STATE 5 s 8117 8116',
19027 'STATE 2 a 8075 8118',
19028 'STATE 3 o 8120 8119',
19029 'PHONE ao1',
19030 'STATE 2 f 8122 8121',
19031 'STATE 2 c 8100 8120',
19032 'STATE 5 e 8124 8123',
19033 'STATE 6 o 8126 8125',
19034 'STATE 6 i 8100 8127',
19035 'STATE 4 w 8129 8128',
19036 'STATE 5 # 8131 8130',
19037 'STATE 5 r 8133 8132',
19038 'STATE 6 e 8135 8134',
19039 'STATE 2 w 8137 8136',
19040 'STATE 4 t 8120 8071',
19041 'STATE 1 b 8138 8120',
19042 'STATE 5 # 8120 8071',
19043 'STATE 2 w 8120 8139',
19044 'STATE 3 n 8096 8140',
19045 'STATE 5 e 8142 8141',
19046 'STATE 6 # 8075 8143',
19047 'STATE 2 s 8144 8075',
19048 'STATE 3 t 8075 8145',
19049 'PHONE uh1',
19050 'STATE 3 m 8075 8146',
19051 'STATE 3 i 8147 8100',
19052 'STATE 5 a 8149 8148',
19053 'STATE 3 n 8100 8150',
19054 'STATE 6 y 8100 8151',
19055 'STATE 3 b 8152 8100',
19056 'STATE 6 o 8075 8153',
19057 'STATE 4 i 8155 8154',
19058 'STATE 6 k 8100 8156',
19059 'STATE 3 i 8158 8157',
19060 'STATE 3 i 8160 8159',
19061 'STATE 5 g 8162 8161',
19062 'STATE 3 h 8164 8163',
19063 'STATE 1 0 8166 8165',
19064 'STATE 3 h 8081 8167',
19065 'STATE 2 c 8071 8168',
19066 'STATE 4 l 8120 8071',
19067 'STATE 6 # 8169 8120',
19068 'STATE 2 g 8120 8170',
19069 'STATE 2 l 8096 8171',
19070 'STATE 5 f 8173 8172',
19071 'STATE 3 m 8175 8174',
19072 'STATE 6 h 8075 8176',
19073 'STATE 5 t 8075 8100',
19074 'STATE 2 a 8177 8075',
19075 'STATE 2 p 8100 8178',
19076 'PHONE ao',
19077 'STATE 5 o 8180 8179',
19078 'STATE 6 i 8075 8181',
19079 'STATE 6 # 8100 8182',
19080 'STATE 6 e 8183 8100',
19081 'PHONE aa1',
19082 'STATE 6 a 8075 8184',
19083 'STATE 4 y 8186 8185',
19084 'STATE 5 s 8188 8187',
19085 'STATE 5 # 8190 8189',
19086 'STATE 5 e 8192 8191',
19087 'STATE 2 t 8160 8193',
19088 'STATE 3 s 8195 8194',
19089 'PHONE ax',
19090 'STATE 5 t 8197 8196',
19091 'STATE 2 o 8096 8198',
19092 'STATE 3 t 8120 8199',
19093 'STATE 1 0 8081 8200',
19094 'STATE 1 # 8201 8160',
19095 'STATE 6 s 8075 8202',
19096 'STATE 1 # 8081 8203',
19097 'STATE 1 # 8071 8204',
19098 'PHONE uh',
19099 'STATE 2 h 8120 8113',
19100 'STATE 3 t 8205 8096',
19101 'STATE 5 t 8207 8206',
19102 'STATE 3 d 8147 8075',
19103 'STATE 6 d 8209 8208',
19104 'STATE 6 # 8211 8210',
19105 'STATE 6 t 8212 8100',
19106 'STATE 3 d 8100 8075',
19107 'STATE 5 o 8075 8213',
19108 'STATE 6 g 8215 8214',
19109 'STATE 3 b 8075 8216',
19110 'STATE 3 m 8218 8217',
19111 'STATE 6 a 8100 8219',
19112 'STATE 3 f 8100 8220',
19113 'STATE 6 u 8075 8100',
19114 'STATE 5 e 8222 8221',
19115 'STATE 5 o 8224 8223',
19116 'STATE 6 g 8226 8225',
19117 'STATE 2 # 8228 8227',
19118 'STATE 5 n 8230 8229',
19119 'STATE 1 # 8232 8231',
19120 'STATE 5 g 8234 8233',
19121 'STATE 6 # 8236 8235',
19122 'STATE 5 e 8238 8237',
19123 'STATE 3 t 8160 8239',
19124 'STATE 1 a 8240 8160',
19125 'STATE 5 n 8242 8241',
19126 'STATE 2 0 8081 8243',
19127 'STATE 2 # 8245 8244',
19128 'STATE 6 t 8247 8246',
19129 'PHONE aw',
19130 'STATE 2 t 8081 8075',
19131 'STATE 3 c 8075 8248',
19132 'STATE 1 0 8081 8249',
19133 'STATE 5 h 8250 8071',
19134 'STATE 1 r 8096 8251',
19135 'STATE 5 m 8253 8252',
19136 'STATE 3 f 8255 8254',
19137 'STATE 6 t 8075 8256',
19138 'STATE 2 a 8075 8257',
19139 'STATE 6 d 8075 8147',
19140 'STATE 1 r 8147 8258',
19141 'STATE 2 n 8100 8147',
19142 'STATE 3 h 8100 8259',
19143 'STATE 6 o 8261 8260',
19144 'STATE 2 # 8100 8075',
19145 'STATE 3 d 8100 8262',
19146 'STATE 3 d 8147 8263',
19147 'STATE 6 n 8147 8264',
19148 'STATE 6 h 8100 8265',
19149 'STATE 3 t 8100 8266',
19150 'STATE 2 # 8268 8267',
19151 'STATE 4 v 8270 8269',
19152 'STATE 6 m 8096 8271',
19153 'STATE 3 t 8096 8272',
19154 'STATE 5 r 8274 8273',
19155 'STATE 3 d 8071 8275',
19156 'STATE 6 # 8277 8276',
19157 'STATE 3 l 8278 8272',
19158 'STATE 2 # 8280 8279',
19159 'STATE 3 d 8081 8281',
19160 'STATE 3 k 8283 8282',
19161 'STATE 3 l 8275 8284',
19162 'STATE 3 c 8286 8285',
19163 'STATE 3 c 8288 8287',
19164 'STATE 1 0 8290 8289',
19165 'STATE 3 g 8100 8291',
19166 'STATE 6 c 8152 8292',
19167 'STATE 6 # 8275 8293',
19168 'STATE 2 g 8160 8294',
19169 'STATE 2 i 8295 8160',
19170 'STATE 5 l 8297 8296',
19171 'STATE 3 y 8075 8298',
19172 'STATE 6 # 8081 8299',
19173 'STATE 1 # 8301 8300',
19174 'STATE 3 d 8303 8302',
19175 'STATE 6 # 8305 8304',
19176 'STATE 3 c 8100 8147',
19177 'STATE 3 h 8081 8306',
19178 'STATE 3 r 8081 8075',
19179 'STATE 4 t 8071 8075',
19180 'STATE 1 h 8275 8096',
19181 'STATE 3 f 8308 8307',
19182 'STATE 6 a 8309 8100',
19183 'STATE 6 u 8075 8310',
19184 'STATE 6 # 8075 8311',
19185 'STATE 6 l 8147 8312',
19186 'STATE 2 o 8075 8313',
19187 'STATE 2 r 8100 8147',
19188 'STATE 5 g 8100 8314',
19189 'STATE 5 t 8316 8315',
19190 'STATE 3 f 8318 8317',
19191 'STATE 6 n 8075 8319',
19192 'STATE 6 # 8100 8320',
19193 'STATE 6 l 8100 8075',
19194 'STATE 6 y 8100 8321',
19195 'STATE 3 b 8147 8100',
19196 'STATE 5 f 8323 8322',
19197 'STATE 4 m 8325 8324',
19198 'STATE 6 # 8327 8326',
19199 'STATE 2 0 8329 8328',
19200 'STATE 1 0 8272 8330',
19201 'PHONE oy1',
19202 'STATE 5 a 8332 8331',
19203 'STATE 1 0 8272 8277',
19204 'PHONE ow1',
19205 'STATE 3 l 8272 8333',
19206 'PHONE w',
19207 'PHONE oy',
19208 'STATE 1 # 8335 8334',
19209 'STATE 6 l 8337 8336',
19210 'STATE 3 t 8081 8338',
19211 'STATE 3 n 8096 8339',
19212 'STATE 1 a 8096 8200',
19213 'STATE 3 r 8275 8081',
19214 'STATE 1 0 8341 8340',
19215 'STATE 6 # 8343 8342',
19216 'STATE 1 0 8345 8344',
19217 'STATE 6 e 8160 8346',
19218 'STATE 1 # 8348 8347',
19219 'STATE 6 y 8350 8349',
19220 'STATE 3 d 8351 8275',
19221 'STATE 1 # 8160 8352',
19222 'STATE 6 t 8096 8160',
19223 'STATE 2 n 8354 8353',
19224 'PHONE aa',
19225 'STATE 5 d 8356 8355',
19226 'STATE 2 o 8160 8357',
19227 'STATE 1 l 8075 8358',
19228 'STATE 3 m 8360 8359',
19229 'STATE 2 r 8362 8361',
19230 'STATE 2 t 8100 8363',
19231 'STATE 3 c 8100 8364',
19232 'STATE 6 h 8275 8075',
19233 'STATE 3 j 8075 8365',
19234 'STATE 2 e 8169 8366',
19235 'STATE 6 t 8081 8075',
19236 'STATE 5 a 8368 8367',
19237 'STATE 6 # 8075 8369',
19238 'STATE 1 a 8100 8370',
19239 'STATE 1 r 8100 8371',
19240 'STATE 2 m 8075 8100',
19241 'STATE 2 l 8100 8372',
19242 'STATE 3 l 8100 8075',
19243 'STATE 3 l 8100 8373',
19244 'STATE 3 f 8375 8374',
19245 'STATE 6 r 8147 8376',
19246 'STATE 3 t 8147 8100',
19247 'STATE 5 g 8147 8100',
19248 'STATE 3 m 8075 8100',
19249 'STATE 2 # 8378 8377',
19250 'STATE 3 s 8100 8379',
19251 'STATE 4 a 8381 8380',
19252 'STATE 4 f 8383 8382',
19253 'STATE 4 e 8385 8384',
19254 'STATE 3 c 8387 8386',
19255 'STATE 1 0 8389 8388',
19256 'STATE 4 m 8390 8275',
19257 'STATE 3 r 8392 8391',
19258 'STATE 6 r 8275 8094',
19259 'STATE 3 u 8272 8393',
19260 'STATE 5 c 8395 8394',
19261 'STATE 6 # 8275 8096',
19262 'STATE 3 a 8081 8396',
19263 'STATE 6 t 8160 8397',
19264 'STATE 2 s 8275 8398',
19265 'STATE 3 h 8081 8399',
19266 'STATE 5 a 8200 8400',
19267 'STATE 1 # 8402 8401',
19268 'STATE 3 h 8404 8403',
19269 'STATE 6 c 8406 8405',
19270 'STATE 3 n 8408 8407',
19271 'STATE 5 a 8152 8409',
19272 'STATE 5 i 8275 8152',
19273 'STATE 1 # 8411 8410',
19274 'STATE 6 o 8413 8412',
19275 'STATE 6 r 8152 8160',
19276 'STATE 6 s 8415 8414',
19277 'STATE 2 l 8075 8416',
19278 'STATE 2 # 8418 8417',
19279 'STATE 3 h 8094 8419',
19280 'STATE 2 r 8275 8094',
19281 'STATE 2 s 8160 8420',
19282 'STATE 3 m 8160 8421',
19283 'STATE 3 d 8160 8422',
19284 'STATE 5 c 8424 8423',
19285 'STATE 3 b 8075 8425',
19286 'STATE 6 d 8275 8426',
19287 'STATE 6 # 8075 8427',
19288 'STATE 6 s 8081 8428',
19289 'STATE 1 0 8081 8160',
19290 'STATE 2 t 8100 8429',
19291 'STATE 1 u 8096 8200',
19292 'STATE 3 r 8081 8430',
19293 'STATE 3 r 8075 8431',
19294 'STATE 6 a 8075 8432',
19295 'STATE 1 0 8081 8433',
19296 'STATE 6 z 8075 8434',
19297 'STATE 6 # 8100 8435',
19298 'STATE 5 c 8100 8436',
19299 'STATE 2 r 8100 8437',
19300 'STATE 2 p 8100 8438',
19301 'STATE 3 f 8100 8439',
19302 'STATE 5 t 8100 8440',
19303 'STATE 6 z 8075 8441',
19304 'STATE 5 g 8443 8442',
19305 'STATE 6 e 8444 8100',
19306 'STATE 6 t 8100 8445',
19307 'STATE 3 l 8100 8446',
19308 'STATE 3 k 8100 8447',
19309 'STATE 5 # 8449 8448',
19310 'STATE 5 r 8100 8450',
19311 'STATE 3 k 8147 8451',
19312 'STATE 6 # 8453 8452',
19313 'STATE 4 a 8455 8454',
19314 'STATE 5 r 8100 8456',
19315 'STATE 5 a 8458 8457',
19316 'STATE 5 f 8094 8459',
19317 'STATE 4 m 8461 8460',
19318 'STATE 4 m 8463 8462',
19319 'STATE 3 s 8160 8464',
19320 'STATE 3 m 8071 8465',
19321 'STATE 2 p 8467 8466',
19322 'STATE 2 e 8469 8468',
19323 'STATE 6 c 8275 8470',
19324 'STATE 6 e 8272 8471',
19325 'STATE 1 o 8160 8472',
19326 'STATE 6 c 8160 8473',
19327 'STATE 3 n 8275 8474',
19328 'STATE 3 c 8081 8475',
19329 'STATE 5 e 8152 8081',
19330 'STATE 6 e 8275 8476',
19331 'STATE 3 r 8081 8275',
19332 'STATE 3 d 8096 8477',
19333 'STATE 2 c 8096 8275',
19334 'STATE 5 i 8479 8478',
19335 'STATE 5 i 8152 8096',
19336 'STATE 5 t 8481 8480',
19337 'STATE 5 t 8295 8482',
19338 'STATE 1 0 8484 8483',
19339 'STATE 6 # 8486 8485',
19340 'STATE 2 s 8094 8100',
19341 'STATE 6 a 8152 8487',
19342 'STATE 3 m 8152 8295',
19343 'STATE 6 l 8096 8488',
19344 'STATE 1 i 8096 8275',
19345 'STATE 2 e 8152 8275',
19346 'PHONE w-ah1',
19347 'STATE 3 n 8152 8489',
19348 'STATE 3 m 8094 8275',
19349 'STATE 6 # 8490 8160',
19350 'STATE 1 # 8152 8491',
19351 'STATE 1 i 8160 8492',
19352 'STATE 6 t 8494 8493',
19353 'STATE 3 t 8075 8495',
19354 'STATE 3 r 8081 8496',
19355 'STATE 6 t 8275 8497',
19356 'STATE 2 # 8081 8498',
19357 'STATE 1 # 8081 8499',
19358 'STATE 3 l 8200 8500',
19359 'STATE 2 s 8075 8081',
19360 'STATE 3 t 8075 8501',
19361 'STATE 6 i 8075 8502',
19362 'STATE 2 a 8100 8075',
19363 'STATE 3 u 8120 8503',
19364 'STATE 1 a 8505 8504',
19365 'STATE 6 a 8100 8506',
19366 'STATE 3 f 8075 8100',
19367 'STATE 3 t 8100 8507',
19368 'STATE 3 c 8100 8508',
19369 'STATE 5 n 8100 8509',
19370 'STATE 6 n 8100 8510',
19371 'STATE 5 b 8443 8100',
19372 'STATE 6 i 8075 8100',
19373 'STATE 2 # 8100 8147',
19374 'STATE 6 n 8147 8100',
19375 'STATE 3 f 8100 8511',
19376 'STATE 6 t 8147 8512',
19377 'STATE 5 a 8514 8513',
19378 'STATE 4 s 8516 8515',
19379 'STATE 2 b 8518 8517',
19380 'STATE 3 w 8169 8519',
19381 'STATE 6 s 8100 8520',
19382 'STATE 3 l 8147 8521',
19383 'STATE 5 a 8523 8522',
19384 'STATE 5 r 8100 8524',
19385 'STATE 6 r 8100 8525',
19386 'STATE 5 o 8527 8526',
19387 'STATE 3 w 8120 8528',
19388 'STATE 5 p 8530 8529',
19389 'STATE 4 k 8275 8531',
19390 'STATE 3 w 8533 8532',
19391 'STATE 4 s 8535 8534',
19392 'STATE 3 h 8275 8536',
19393 'STATE 3 c 8094 8275',
19394 'STATE 3 n 8538 8537',
19395 'STATE 1 # 8275 8539',
19396 'STATE 1 # 8540 8071',
19397 'STATE 5 # 8541 8272',
19398 'STATE 5 # 8542 8278',
19399 'STATE 1 h 8096 8543',
19400 'STATE 6 h 8096 8275',
19401 'STATE 6 e 8277 8096',
19402 'STATE 2 k 8545 8544',
19403 'STATE 2 p 8081 8546',
19404 'STATE 3 d 8081 8547',
19405 'STATE 3 r 8275 8548',
19406 'STATE 2 g 8275 8549',
19407 'STATE 2 f 8551 8550',
19408 'STATE 6 a 8275 8552',
19409 'STATE 5 a 8554 8553',
19410 'STATE 3 m 8556 8555',
19411 'STATE 5 a 8152 8557',
19412 'STATE 2 e 8559 8558',
19413 'STATE 6 e 8561 8560',
19414 'STATE 3 l 8100 8562',
19415 'STATE 3 r 8100 8563',
19416 'STATE 6 i 8096 8564',
19417 'STATE 3 p 8275 8565',
19418 'STATE 3 d 8152 8566',
19419 'STATE 5 s 8160 8275',
19420 'STATE 2 r 8568 8567',
19421 'STATE 1 o 8160 8569',
19422 'STATE 5 f 8571 8570',
19423 'STATE 5 e 8075 8081',
19424 'STATE 6 h 8081 8572',
19425 'STATE 3 l 8081 8573',
19426 'STATE 3 f 8081 8574',
19427 'STATE 3 r 8081 8575',
19428 'STATE 6 e 8573 8576',
19429 'STATE 2 b 8200 8577',
19430 'STATE 6 h 8579 8578',
19431 'STATE 3 b 8581 8580',
19432 'STATE 5 o 8583 8582',
19433 'STATE 6 t 8075 8584',
19434 'STATE 3 t 8096 8100',
19435 'STATE 5 g 8075 8585',
19436 'STATE 1 e 8586 8100',
19437 'STATE 2 n 8075 8587',
19438 'STATE 6 # 8100 8588',
19439 'STATE 3 k 8100 8589',
19440 'STATE 3 b 8100 8590',
19441 'STATE 3 m 8592 8591',
19442 'STATE 4 e 8594 8593',
19443 'STATE 6 # 8596 8595',
19444 'STATE 4 e 8598 8597',
19445 'STATE 1 o 8600 8599',
19446 'STATE 3 r 8602 8601',
19447 'STATE 5 d 8100 8275',
19448 'STATE 4 l 8604 8603',
19449 'STATE 1 # 8606 8605',
19450 'STATE 1 # 8100 8607',
19451 'STATE 4 l 8609 8608',
19452 'STATE 6 # 8275 8610',
19453 'STATE 6 u 8096 8275',
19454 'STATE 5 w 8152 8275',
19455 'STATE 5 i 8152 8611',
19456 'STATE 6 l 8160 8612',
19457 'STATE 6 l 8160 8613',
19458 'STATE 5 m 8615 8614',
19459 'STATE 6 a 8160 8616',
19460 'STATE 4 x 8152 8617',
19461 'STATE 6 t 8619 8618',
19462 'PHONE ih1',
19463 'STATE 6 r 8621 8620',
19464 'STATE 3 l 8152 8622',
19465 'STATE 3 s 8094 8623',
19466 'STATE 3 p 8152 8624',
19467 'STATE 6 l 8152 8625',
19468 'STATE 2 g 8275 8160',
19469 'STATE 6 n 8275 8071',
19470 'STATE 1 r 8278 8626',
19471 'STATE 3 r 8278 8272',
19472 'STATE 5 e 8277 8627',
19473 'STATE 3 p 8081 8628',
19474 'STATE 1 c 8152 8275',
19475 'STATE 5 d 8081 8629',
19476 'STATE 3 p 8081 8630',
19477 'STATE 1 0 8081 8275',
19478 'STATE 2 d 8632 8631',
19479 'STATE 1 # 8634 8633',
19480 'STATE 5 t 8635 8152',
19481 'STATE 6 # 8275 8636',
19482 'STATE 5 i 8638 8637',
19483 'STATE 6 # 8275 8639',
19484 'STATE 6 i 8295 8152',
19485 'STATE 6 e 8152 8640',
19486 'STATE 5 v 8295 8641',
19487 'STATE 5 i 8275 8642',
19488 'STATE 1 # 8152 8160',
19489 'STATE 5 n 8644 8643',
19490 'STATE 5 c 8160 8645',
19491 'STATE 3 r 8100 8152',
19492 'STATE 1 a 8100 8646',
19493 'STATE 3 l 8100 8647',
19494 'STATE 6 y 8649 8648',
19495 'STATE 3 m 8152 8275',
19496 'STATE 2 a 8651 8650',
19497 'STATE 1 a 8652 8160',
19498 'STATE 1 a 8160 8653',
19499 'STATE 1 0 8654 8075',
19500 'STATE 6 f 8275 8160',
19501 'STATE 6 e 8075 8275',
19502 'STATE 1 0 8081 8075',
19503 'STATE 3 c 8081 8655',
19504 'STATE 1 e 8081 8656',
19505 'STATE 3 s 8081 8657',
19506 'STATE 1 t 8075 8658',
19507 'STATE 6 e 8081 8075',
19508 'STATE 3 l 8081 8659',
19509 'STATE 1 # 8075 8660',
19510 'STATE 6 n 8662 8661',
19511 'STATE 6 a 8664 8663',
19512 'STATE 6 u 8075 8665',
19513 'STATE 3 m 8666 8075',
19514 'STATE 6 s 8075 8100',
19515 'STATE 2 x 8100 8667',
19516 'STATE 6 # 8100 8668',
19517 'STATE 2 a 8670 8669',
19518 'STATE 6 a 8317 8671',
19519 'STATE 6 n 8147 8672',
19520 'STATE 6 n 8674 8673',
19521 'STATE 6 l 8075 8147',
19522 'STATE 4 s 8676 8675',
19523 'STATE 3 h 8678 8677',
19524 'STATE 6 t 8680 8679',
19525 'STATE 3 e 8152 8681',
19526 'STATE 4 m 8683 8682',
19527 'STATE 3 l 8275 8684',
19528 'STATE 1 # 8096 8685',
19529 'STATE 3 l 8160 8096',
19530 'STATE 5 d 8275 8686',
19531 'STATE 6 h 8275 8687',
19532 'STATE 3 h 8275 8152',
19533 'STATE 6 i 8275 8096',
19534 'STATE 1 0 8689 8688',
19535 'STATE 2 r 8100 8690',
19536 'STATE 3 h 8692 8691',
19537 'STATE 5 i 8694 8693',
19538 'STATE 5 l 8696 8695',
19539 'STATE 3 k 8698 8697',
19540 'STATE 5 b 8699 8152',
19541 'STATE 3 k 8096 8700',
19542 'STATE 3 h 8275 8701',
19543 'STATE 5 b 8703 8702',
19544 'STATE 6 o 8152 8160',
19545 'STATE 6 i 8160 8704',
19546 'STATE 6 d 8706 8705',
19547 'STATE 6 s 8464 8707',
19548 'STATE 1 # 8708 8152',
19549 'STATE 4 x 8152 8709',
19550 'STATE 2 # 8710 8152',
19551 'STATE 6 n 8275 8711',
19552 'STATE 3 c 8713 8712',
19553 'STATE 3 s 8275 8714',
19554 'STATE 6 r 8275 8096',
19555 'STATE 2 n 8278 8715',
19556 'STATE 6 e 8272 8716',
19557 'STATE 2 r 8718 8717',
19558 'STATE 3 l 8720 8719',
19559 'STATE 5 r 8100 8721',
19560 'STATE 2 f 8275 8722',
19561 'STATE 3 l 8275 8096',
19562 'STATE 5 a 8724 8723',
19563 'STATE 5 o 8726 8725',
19564 'STATE 6 e 8094 8727',
19565 'STATE 6 z 8729 8728',
19566 'STATE 5 y 8275 8730',
19567 'STATE 6 n 8732 8731',
19568 'STATE 3 m 8152 8733',
19569 'STATE 6 a 8096 8152',
19570 'STATE 5 r 8295 8734',
19571 'STATE 2 b 8152 8735',
19572 'STATE 5 r 8152 8736',
19573 'STATE 6 i 8160 8152',
19574 'STATE 5 v 8160 8737',
19575 'STATE 2 e 8100 8738',
19576 'STATE 6 u 8094 8739',
19577 'STATE 1 a 8293 8160',
19578 'STATE 1 m 8275 8160',
19579 'STATE 1 d 8160 8740',
19580 'STATE 1 e 8160 8741',
19581 'STATE 3 d 8100 8160',
19582 'STATE 3 n 8160 8295',
19583 'STATE 5 e 8152 8742',
19584 'STATE 3 s 8075 8743',
19585 'STATE 1 a 8081 8744',
19586 'STATE 3 b 8075 8745',
19587 'STATE 3 d 8075 8081',
19588 'STATE 3 b 8081 8100',
19589 'STATE 1 r 8147 8746',
19590 'STATE 1 0 8747 8100',
19591 'STATE 1 0 8100 8120',
19592 'STATE 5 p 8749 8748',
19593 'STATE 5 i 8100 8750',
19594 'STATE 3 b 8075 8751',
19595 'STATE 1 m 8075 8752',
19596 'STATE 3 p 8100 8147',
19597 'STATE 2 s 8100 8753',
19598 'STATE 3 n 8100 8754',
19599 'STATE 5 e 8100 8075',
19600 'STATE 3 m 8756 8755',
19601 'STATE 3 h 8147 8100',
19602 'STATE 6 c 8147 8757',
19603 'STATE 3 l 8147 8100',
19604 'STATE 4 l 8759 8758',
19605 'STATE 5 i 8761 8760',
19606 'STATE 1 # 8763 8762',
19607 'STATE 2 s 8071 8764',
19608 'STATE 3 w 8120 8765',
19609 'STATE 1 h 8075 8766',
19610 'STATE 3 s 8275 8767',
19611 'STATE 1 # 8769 8768',
19612 'STATE 3 c 8770 8559',
19613 'STATE 1 i 8275 8771',
19614 'STATE 1 i 8096 8772',
19615 'STATE 1 # 8275 8773',
19616 'STATE 1 e 8096 8404',
19617 'STATE 1 i 8160 8100',
19618 'STATE 6 e 8160 8644',
19619 'STATE 2 s 8152 8774',
19620 'STATE 2 c 8100 8775',
19621 'STATE 2 t 8100 8776',
19622 'STATE 5 o 8778 8777',
19623 'STATE 4 v 8780 8779',
19624 'STATE 5 o 8782 8781',
19625 'STATE 3 c 8784 8783',
19626 'STATE 3 l 8786 8785',
19627 'STATE 6 k 8275 8787',
19628 'STATE 6 a 8789 8788',
19629 'STATE 6 g 8096 8275',
19630 'STATE 6 # 8275 8790',
19631 'STATE 6 n 8160 8791',
19632 'STATE 6 e 8275 8160',
19633 'STATE 6 r 8152 8792',
19634 'STATE 6 s 8794 8793',
19635 'STATE 4 p 8160 8795',
19636 'STATE 3 r 8797 8796',
19637 'STATE 2 g 8160 8152',
19638 'STATE 4 d 8799 8798',
19639 'STATE 3 m 8801 8800',
19640 'STATE 6 t 8160 8275',
19641 'STATE 3 p 8152 8802',
19642 'STATE 6 d 8160 8094',
19643 'STATE 3 c 8804 8803',
19644 'STATE 1 e 8272 8805',
19645 'STATE 5 d 8806 8272',
19646 'STATE 2 l 8808 8807',
19647 'STATE 3 r 8096 8275',
19648 'STATE 2 b 8081 8809',
19649 'STATE 6 r 8081 8275',
19650 'STATE 3 n 8081 8810',
19651 'STATE 2 k 8200 8811',
19652 'STATE 5 t 8813 8812',
19653 'STATE 6 # 8275 8814',
19654 'STATE 2 l 8075 8815',
19655 'STATE 2 p 8160 8816',
19656 'STATE 6 a 8160 8094',
19657 'STATE 6 o 8275 8817',
19658 'STATE 3 r 8075 8160',
19659 'STATE 3 w 8819 8818',
19660 'STATE 6 e 8275 8820',
19661 'STATE 3 b 8096 8275',
19662 'STATE 6 g 8152 8821',
19663 'STATE 5 b 8152 8822',
19664 'STATE 5 t 8824 8823',
19665 'STATE 5 d 8826 8825',
19666 'STATE 5 t 8160 8827',
19667 'STATE 3 s 8100 8147',
19668 'STATE 3 m 8094 8100',
19669 'STATE 3 p 8152 8828',
19670 'STATE 3 n 8160 8829',
19671 'STATE 3 b 8075 8830',
19672 'STATE 6 s 8081 8075',
19673 'STATE 1 # 8081 8831',
19674 'STATE 3 c 8075 8832',
19675 'STATE 6 e 8075 8100',
19676 'STATE 6 g 8169 8075',
19677 'STATE 5 d 8834 8833',
19678 'STATE 2 t 8147 8835',
19679 'STATE 5 g 8100 8836',
19680 'STATE 6 # 8100 8837',
19681 'STATE 2 e 8100 8075',
19682 'STATE 2 a 8100 8313',
19683 'STATE 2 d 8100 8075',
19684 'STATE 6 e 8839 8838',
19685 'STATE 5 i 8840 8100',
19686 'STATE 3 f 8100 8841',
19687 'STATE 1 # 8843 8842',
19688 'STATE 6 g 8845 8844',
19689 'STATE 5 k 8847 8846',
19690 'STATE 6 t 8849 8848',
19691 'STATE 1 0 8275 8850',
19692 'STATE 5 r 8100 8851',
19693 'STATE 1 s 8275 8852',
19694 'STATE 1 # 8854 8853',
19695 'STATE 3 n 8160 8855',
19696 'STATE 4 l 8856 8275',
19697 'STATE 4 v 8858 8857',
19698 'STATE 4 l 8160 8152',
19699 'STATE 1 n 8152 8859',
19700 'STATE 3 h 8275 8096',
19701 'STATE 3 i 8861 8860',
19702 'STATE 6 s 8275 8862',
19703 'STATE 3 r 8152 8160',
19704 'STATE 3 t 8147 8863',
19705 'STATE 1 e 8100 8147',
19706 'STATE 4 h 8865 8864',
19707 'STATE 6 # 8275 8866',
19708 'STATE 4 x 8152 8867',
19709 'STATE 3 m 8071 8868',
19710 'STATE 5 i 8870 8869',
19711 'STATE 6 r 8094 8871',
19712 'STATE 3 r 8873 8872',
19713 'STATE 6 a 8160 8874',
19714 'STATE 3 b 8876 8875',
19715 'STATE 4 c 8275 8877',
19716 'STATE 6 l 8160 8878',
19717 'STATE 3 d 8160 8879',
19718 'STATE 3 b 8295 8152',
19719 'STATE 3 t 8881 8880',
19720 'STATE 6 t 8275 8152',
19721 'STATE 6 o 8160 8882',
19722 'STATE 6 r 8884 8883',
19723 'STATE 4 c 8152 8885',
19724 'STATE 2 i 8160 8886',
19725 'STATE 2 g 8152 8887',
19726 'STATE 1 # 8275 8096',
19727 'STATE 6 n 8889 8888',
19728 'STATE 6 l 8891 8890',
19729 'STATE 3 t 8152 8892',
19730 'STATE 4 d 8152 8275',
19731 'STATE 3 d 8893 8275',
19732 'STATE 1 0 8895 8894',
19733 'STATE 6 r 8094 8896',
19734 'STATE 2 l 8897 8272',
19735 'STATE 3 v 8272 8898',
19736 'STATE 3 d 8900 8899',
19737 'STATE 3 l 8901 8275',
19738 'STATE 3 r 8902 8081',
19739 'STATE 5 a 8904 8903',
19740 'STATE 2 t 8906 8905',
19741 'STATE 3 p 8152 8907',
19742 'STATE 6 e 8566 8908',
19743 'STATE 2 c 8152 8909',
19744 'STATE 2 i 8075 8910',
19745 'STATE 3 r 8275 8160',
19746 'STATE 6 u 8275 8911',
19747 'STATE 6 p 8160 8912',
19748 'STATE 6 e 8094 8152',
19749 'STATE 3 m 8152 8913',
19750 'STATE 3 b 8152 8914',
19751 'STATE 6 u 8295 8915',
19752 'STATE 2 c 8152 8916',
19753 'STATE 6 e 8160 8917',
19754 'STATE 5 q 8152 8918',
19755 'STATE 6 u 8160 8919',
19756 'STATE 5 f 8160 8920',
19757 'STATE 2 t 8922 8921',
19758 'STATE 3 r 8160 8923',
19759 'STATE 5 k 8081 8924',
19760 'STATE 6 c 8081 8925',
19761 'STATE 3 r 8075 8926',
19762 'STATE 3 t 8928 8927',
19763 'STATE 6 e 8100 8929',
19764 'STATE 3 c 8100 8930',
19765 'STATE 1 r 8100 8837',
19766 'STATE 2 o 8075 8100',
19767 'STATE 6 l 8931 8100',
19768 'STATE 5 d 8100 8932',
19769 'STATE 6 s 8100 8147',
19770 'STATE 6 l 8147 8100',
19771 'STATE 6 # 8934 8933',
19772 'STATE 5 o 8936 8935',
19773 'STATE 5 d 8938 8937',
19774 'STATE 1 0 8152 8939',
19775 'STATE 1 0 8941 8940',
19776 'STATE 6 i 8081 8942',
19777 'STATE 6 s 8275 8943',
19778 'STATE 3 p 8944 8152',
19779 'STATE 2 h 8275 8945',
19780 'STATE 5 b 8275 8946',
19781 'STATE 5 n 8160 8096',
19782 'STATE 1 0 8948 8947',
19783 'STATE 4 p 8950 8949',
19784 'STATE 1 a 8160 8951',
19785 'STATE 1 r 8275 8952',
19786 'STATE 4 l 8954 8953',
19787 'STATE 2 o 8152 8295',
19788 'STATE 1 r 8152 8955',
19789 'STATE 3 g 8096 8956',
19790 'STATE 2 r 8096 8275',
19791 'STATE 5 k 8275 8957',
19792 'STATE 1 o 8147 8958',
19793 'STATE 4 s 8960 8959',
19794 'STATE 5 r 8100 8961',
19795 'STATE 4 x 8152 8962',
19796 'STATE 6 t 8152 8963',
19797 'STATE 6 t 8160 8964',
19798 'STATE 5 y 8966 8965',
19799 'STATE 6 n 8968 8967',
19800 'STATE 3 c 8893 8969',
19801 'STATE 6 u 8160 8970',
19802 'STATE 6 e 8275 8971',
19803 'STATE 6 e 8160 8972',
19804 'STATE 4 s 8974 8973',
19805 'STATE 4 l 8275 8975',
19806 'STATE 6 t 8096 8976',
19807 'STATE 4 l 8160 8977',
19808 'STATE 3 t 8071 8152',
19809 'STATE 6 i 8096 8978',
19810 'STATE 6 s 8096 8152',
19811 'STATE 6 e 8160 8979',
19812 'STATE 1 # 8981 8980',
19813 'STATE 2 e 8160 8982',
19814 'STATE 4 f 8160 8983',
19815 'STATE 3 r 8160 8275',
19816 'STATE 1 h 8152 8984',
19817 'STATE 4 b 8986 8985',
19818 'STATE 4 z 8100 8987',
19819 'STATE 6 s 8566 8988',
19820 'STATE 2 # 8152 8096',
19821 'STATE 4 p 8160 8989',
19822 'STATE 6 n 8152 8160',
19823 'STATE 6 r 8991 8990',
19824 'STATE 3 b 8275 8992',
19825 'STATE 6 n 8094 8275',
19826 'STATE 3 r 8272 8278',
19827 'STATE 2 e 8272 8993',
19828 'STATE 1 t 8275 8994',
19829 'STATE 5 s 8096 8995',
19830 'STATE 1 a 8996 8096',
19831 'STATE 5 l 8081 8997',
19832 'STATE 3 l 8275 8998',
19833 'STATE 6 r 8275 8081',
19834 'STATE 2 o 8096 8999',
19835 'STATE 3 l 8096 8275',
19836 'STATE 5 s 9001 9000',
19837 'STATE 1 r 9003 9002',
19838 'STATE 3 s 8160 9004',
19839 'STATE 5 y 8275 9005',
19840 'STATE 6 n 9007 9006',
19841 'STATE 2 # 9009 9008',
19842 'STATE 6 c 8152 9010',
19843 'STATE 6 s 8275 9011',
19844 'STATE 6 i 8295 9012',
19845 'STATE 5 v 8160 9013',
19846 'STATE 1 u 8160 9014',
19847 'STATE 5 j 8152 9015',
19848 'STATE 6 r 8152 8644',
19849 'STATE 5 s 8160 9016',
19850 'STATE 2 e 9018 9017',
19851 'STATE 3 r 9019 8160',
19852 'STATE 1 m 8160 9020',
19853 'STATE 5 p 8075 9021',
19854 'STATE 2 n 8081 9022',
19855 'STATE 6 h 8075 8081',
19856 'STATE 6 c 8100 9023',
19857 'STATE 2 a 8100 9024',
19858 'STATE 3 c 9025 8100',
19859 'STATE 3 m 8100 8075',
19860 'STATE 5 i 8075 8100',
19861 'STATE 5 g 8100 9026',
19862 'STATE 5 t 9028 9027',
19863 'STATE 5 o 8275 9029',
19864 'STATE 2 s 9031 9030',
19865 'STATE 4 t 8275 9032',
19866 'STATE 6 r 8094 9033',
19867 'STATE 3 n 9035 9034',
19868 'STATE 2 p 8152 9036',
19869 'STATE 5 s 9038 9037',
19870 'STATE 6 r 8152 9039',
19871 'STATE 6 e 8152 9040',
19872 'STATE 6 # 8275 9041',
19873 'STATE 2 e 8152 9042',
19874 'STATE 1 o 8275 9043',
19875 'STATE 3 r 8275 9044',
19876 'STATE 4 v 9046 9045',
19877 'STATE 4 h 8295 9047',
19878 'STATE 6 n 9049 9048',
19879 'STATE 2 p 8152 8075',
19880 'STATE 2 e 9051 9050',
19881 'STATE 2 n 9052 8275',
19882 'STATE 4 x 9054 9053',
19883 'STATE 2 t 8295 9055',
19884 'STATE 2 i 8295 9056',
19885 'STATE 2 t 8096 9057',
19886 'STATE 6 # 8275 9058',
19887 'STATE 2 t 8147 9059',
19888 'STATE 4 f 9061 9060',
19889 'STATE 5 s 9063 9062',
19890 'STATE 3 j 8152 9064',
19891 'STATE 3 m 8275 9065',
19892 'STATE 4 t 8275 9066',
19893 'STATE 3 l 8094 9067',
19894 'STATE 3 w 9069 9068',
19895 'STATE 3 p 8152 8275',
19896 'STATE 6 c 9071 9070',
19897 'STATE 3 m 8096 8275',
19898 'STATE 3 m 8160 9072',
19899 'STATE 3 t 9074 9073',
19900 'STATE 6 i 8152 8275',
19901 'STATE 6 o 8160 9075',
19902 'STATE 3 c 9077 9076',
19903 'STATE 6 l 8275 8096',
19904 'STATE 4 h 8152 9078',
19905 'STATE 4 v 8094 8096',
19906 'STATE 4 v 8160 8275',
19907 'STATE 3 r 8096 9079',
19908 'STATE 6 u 8160 9080',
19909 'STATE 3 m 9082 9081',
19910 'STATE 4 s 8152 9083',
19911 'STATE 2 n 8152 9084',
19912 'STATE 2 a 8160 9085',
19913 'STATE 3 t 8160 9086',
19914 'STATE 6 y 8275 9087',
19915 'STATE 2 # 8275 8096',
19916 'STATE 4 t 8275 9088',
19917 'STATE 3 r 9090 9089',
19918 'STATE 3 r 8152 8275',
19919 'STATE 6 n 8275 9091',
19920 'STATE 2 n 8094 9092',
19921 'STATE 3 l 8094 9093',
19922 'STATE 2 a 8272 9094',
19923 'STATE 2 n 9096 9095',
19924 'STATE 2 a 8096 8081',
19925 'STATE 5 e 8096 9097',
19926 'STATE 2 g 8275 9098',
19927 'STATE 3 r 8275 9099',
19928 'STATE 3 s 8096 9100',
19929 'STATE 3 m 9102 9101',
19930 'STATE 6 # 9104 9103',
19931 'STATE 6 o 8160 8152',
19932 'STATE 2 e 8295 8152',
19933 'STATE 2 i 8096 9105',
19934 'STATE 5 a 9107 9106',
19935 'STATE 6 t 8160 9108',
19936 'STATE 3 s 8160 9109',
19937 'STATE 6 o 8295 9110',
19938 'STATE 3 h 8152 9111',
19939 'STATE 6 g 8152 9112',
19940 'STATE 6 l 8152 9113',
19941 'STATE 5 p 9115 9114',
19942 'STATE 6 c 8152 9116',
19943 'STATE 2 s 8160 8152',
19944 'STATE 5 l 8152 9117',
19945 'STATE 5 n 8160 8152',
19946 'STATE 2 u 9119 9118',
19947 'STATE 1 r 8295 9120',
19948 'STATE 1 e 8295 9056',
19949 'STATE 1 r 8152 9121',
19950 'STATE 6 # 8075 9122',
19951 'STATE 3 m 8081 9123',
19952 'STATE 6 i 8100 9124',
19953 'STATE 2 c 8075 9125',
19954 'STATE 2 c 8100 9126',
19955 'STATE 5 s 8100 9127',
19956 'STATE 4 m 9129 9128',
19957 'STATE 1 0 9131 9130',
19958 'STATE 5 i 8275 9132',
19959 'STATE 5 k 8152 9133',
19960 'STATE 5 i 8275 9134',
19961 'STATE 4 p 9136 9135',
19962 'STATE 6 # 9138 9137',
19963 'STATE 3 r 8160 9139',
19964 'STATE 6 # 8096 8160',
19965 'STATE 3 e 9141 9140',
19966 'STATE 1 # 9143 9142',
19967 'STATE 2 c 8100 9144',
19968 'STATE 5 h 8152 9145',
19969 'STATE 1 # 8100 8275',
19970 'STATE 6 a 8275 9146',
19971 'STATE 2 m 8152 8160',
19972 'STATE 5 s 8096 9147',
19973 'STATE 3 l 8275 9148',
19974 'STATE 6 u 8160 9149',
19975 'STATE 6 l 8071 8096',
19976 'STATE 4 c 8096 9150',
19977 'STATE 2 t 8152 9151',
19978 'STATE 3 i 8096 8275',
19979 'STATE 2 h 8096 9152',
19980 'STATE 4 c 8275 8152',
19981 'STATE 1 e 8275 8096',
19982 'STATE 4 h 8096 9153',
19983 'STATE 3 b 8152 8295',
19984 'STATE 1 e 8295 9154',
19985 'STATE 1 a 8160 8295',
19986 'STATE 2 m 8275 8096',
19987 'STATE 2 e 8096 9155',
19988 'STATE 3 r 8147 9156',
19989 'STATE 4 j 8272 9157',
19990 'STATE 3 s 8100 9158',
19991 'STATE 3 k 9160 9159',
19992 'STATE 3 p 9162 9161',
19993 'STATE 5 n 9163 8275',
19994 'STATE 3 l 8275 9164',
19995 'STATE 6 c 9166 9165',
19996 'STATE 6 n 8096 9167',
19997 'STATE 5 u 9169 9168',
19998 'STATE 5 f 8120 8275',
19999 'STATE 6 t 9171 9170',
20000 'STATE 3 s 8160 8152',
20001 'STATE 3 k 8160 9172',
20002 'STATE 6 s 8275 8152',
20003 'STATE 6 e 8152 8275',
20004 'STATE 6 u 8160 8152',
20005 'STATE 3 h 8275 9173',
20006 'STATE 6 b 8096 8275',
20007 'STATE 6 r 8152 9174',
20008 'STATE 3 k 8096 9175',
20009 'STATE 6 l 8160 8152',
20010 'STATE 4 g 8160 9176',
20011 'STATE 4 d 8152 9177',
20012 'STATE 6 c 9179 9178',
20013 'STATE 4 g 8100 9180',
20014 'STATE 1 # 9182 9181',
20015 'STATE 1 # 8096 9183',
20016 'STATE 6 t 9185 9184',
20017 'STATE 4 p 8275 9186',
20018 'STATE 2 # 9187 8152',
20019 'STATE 6 n 8275 8152',
20020 'STATE 6 s 8275 9188',
20021 'STATE 1 # 8094 8275',
20022 'STATE 6 r 8094 9189',
20023 'STATE 3 l 8272 8278',
20024 'STATE 6 a 8081 9190',
20025 'STATE 6 r 8096 8275',
20026 'STATE 5 a 9191 8096',
20027 'STATE 2 c 8275 8081',
20028 'STATE 3 b 9193 9192',
20029 'STATE 2 u 8096 9194',
20030 'STATE 5 y 8160 9195',
20031 'STATE 5 y 9196 8160',
20032 'STATE 3 m 8160 8152',
20033 'STATE 3 r 8160 9197',
20034 'STATE 1 a 9198 8160',
20035 'STATE 2 b 8152 9199',
20036 'STATE 3 r 8275 8152',
20037 'STATE 2 a 8160 9200',
20038 'STATE 1 # 8275 9201',
20039 'STATE 5 o 8096 8152',
20040 'STATE 5 n 9203 9202',
20041 'STATE 6 # 8275 9187',
20042 'STATE 6 t 9204 8152',
20043 'STATE 5 s 9206 9205',
20044 'STATE 6 r 8152 8295',
20045 'STATE 5 d 9075 9207',
20046 'STATE 6 c 8152 9208',
20047 'STATE 3 c 9210 9209',
20048 'STATE 3 l 8160 8295',
20049 'STATE 3 l 8160 9211',
20050 'STATE 3 g 8160 9212',
20051 'STATE 3 l 8075 9213',
20052 'STATE 2 o 8081 9214',
20053 'STATE 3 e 8075 9215',
20054 'STATE 1 m 8075 9216',
20055 'STATE 1 r 8100 8147',
20056 'STATE 5 k 8100 9217',
20057 'STATE 4 x 8152 9218',
20058 'STATE 3 c 9220 9219',
20059 'STATE 6 e 9222 9221',
20060 'STATE 4 b 8160 9223',
20061 'STATE 5 y 9225 9224',
20062 'STATE 5 p 8152 9226',
20063 'STATE 5 h 9227 8152',
20064 'STATE 6 # 8275 9228',
20065 'STATE 6 l 8096 9229',
20066 'STATE 5 v 8152 9230',
20067 'STATE 3 a 8081 9231',
20068 'STATE 1 a 8275 9232',
20069 'STATE 2 a 8152 9233',
20070 'STATE 2 h 8160 9234',
20071 'STATE 6 # 9236 9235',
20072 'STATE 2 f 8100 9237',
20073 'STATE 2 g 9239 9238',
20074 'STATE 5 c 9240 8152',
20075 'STATE 1 m 8096 9241',
20076 'STATE 3 r 8096 9242',
20077 'STATE 2 s 8275 8096',
20078 'STATE 6 l 9244 9243',
20079 'STATE 4 k 8096 9245',
20080 'STATE 6 b 8152 9246',
20081 'STATE 2 s 8096 9247',
20082 'STATE 4 z 8096 9248',
20083 'STATE 1 t 8152 9249',
20084 'STATE 5 t 8275 9250',
20085 'STATE 3 n 8147 9251',
20086 'STATE 5 u 9253 9252',
20087 'STATE 5 f 9255 9254',
20088 'STATE 3 y 8275 9256',
20089 'STATE 6 i 8152 9257',
20090 'STATE 6 a 9259 9258',
20091 'STATE 6 e 8160 8152',
20092 'STATE 6 e 8275 9260',
20093 'STATE 6 m 8275 9261',
20094 'STATE 3 l 8160 9262',
20095 'STATE 3 m 8096 8152',
20096 'STATE 6 c 8152 8275',
20097 'STATE 5 v 8152 9263',
20098 'STATE 6 n 8152 9264',
20099 'STATE 3 p 8096 9265',
20100 'STATE 3 p 8160 9266',
20101 'STATE 6 g 8152 9090',
20102 'STATE 6 c 8152 9267',
20103 'STATE 6 n 8152 8275',
20104 'STATE 3 d 8096 8275',
20105 'STATE 3 r 9269 9268',
20106 'STATE 6 n 8152 8096',
20107 'STATE 6 l 8160 9270',
20108 'STATE 2 b 8096 8160',
20109 'STATE 3 c 8160 9271',
20110 'STATE 3 s 8160 8275',
20111 'STATE 4 l 8275 9272',
20112 'STATE 2 e 8160 9273',
20113 'STATE 4 t 9275 9274',
20114 'STATE 4 l 8096 8160',
20115 'STATE 2 # 9276 8152',
20116 'STATE 3 b 8152 8275',
20117 'STATE 2 e 8094 9277',
20118 'STATE 3 d 8094 8275',
20119 'STATE 2 f 8081 9278',
20120 'STATE 6 n 8081 8096',
20121 'STATE 3 s 8275 9279',
20122 'STATE 6 r 8081 9280',
20123 'STATE 2 r 8096 9281',
20124 'STATE 6 # 9283 9282',
20125 'STATE 2 i 8275 8160',
20126 'STATE 3 m 8160 9284',
20127 'STATE 3 r 8096 8160',
20128 'STATE 2 s 8152 9285',
20129 'STATE 2 e 8160 9286',
20130 'STATE 3 t 8275 8160',
20131 'STATE 5 k 9227 9287',
20132 'STATE 3 t 8094 8152',
20133 'STATE 3 d 8096 8152',
20134 'STATE 6 e 8295 8152',
20135 'STATE 6 t 8295 8152',
20136 'STATE 1 # 8152 9288',
20137 'STATE 6 r 9290 9289',
20138 'STATE 2 l 8160 9291',
20139 'STATE 2 i 8152 8160',
20140 'STATE 3 d 8160 9292',
20141 'STATE 3 l 8152 8160',
20142 'STATE 6 l 8075 9293',
20143 'STATE 3 b 8081 9294',
20144 'STATE 5 y 9296 9295',
20145 'STATE 2 r 8100 9297',
20146 'STATE 5 l 8100 9298',
20147 'STATE 2 p 9300 9299',
20148 'STATE 5 o 8160 9301',
20149 'STATE 2 c 9303 9302',
20150 'STATE 4 c 8152 9304',
20151 'STATE 1 a 8160 9305',
20152 'STATE 4 t 8152 9306',
20153 'STATE 4 c 9308 9307',
20154 'STATE 3 b 8152 9309',
20155 'STATE 3 e 9311 9310',
20156 'STATE 3 m 8094 8152',
20157 'STATE 3 h 8275 9312',
20158 'STATE 2 p 8160 8152',
20159 'STATE 6 t 9314 9313',
20160 'STATE 5 s 8160 9315',
20161 'STATE 2 m 8275 9316',
20162 'STATE 3 m 8152 9317',
20163 'STATE 1 i 8160 8152',
20164 'STATE 2 g 8152 9318',
20165 'STATE 5 h 9320 9319',
20166 'STATE 2 p 9322 9321',
20167 'STATE 1 # 9324 9323',
20168 'STATE 3 l 8100 8275',
20169 'STATE 6 i 8152 8100',
20170 'STATE 3 p 8275 9325',
20171 'STATE 1 i 8275 8096',
20172 'STATE 6 s 9327 9326',
20173 'STATE 4 s 8275 9328',
20174 'STATE 4 s 8096 9329',
20175 'STATE 3 n 8152 9330',
20176 'STATE 1 0 8096 9331',
20177 'STATE 4 g 9333 9332',
20178 'STATE 3 n 8147 9334',
20179 'STATE 5 # 8275 9335',
20180 'STATE 2 a 8100 9336',
20181 'STATE 5 h 9338 9337',
20182 'STATE 6 l 8152 9339',
20183 'STATE 3 h 8152 9340',
20184 'STATE 6 # 8100 9341',
20185 'STATE 3 p 9343 9342',
20186 'STATE 6 a 8275 9344',
20187 'STATE 3 f 8152 9345',
20188 'STATE 3 c 8152 8160',
20189 'STATE 6 # 8152 8275',
20190 'STATE 3 n 9347 9346',
20191 'STATE 6 # 8275 9348',
20192 'STATE 5 c 9350 9349',
20193 'STATE 6 m 8152 8160',
20194 'STATE 6 d 8152 9351',
20195 'STATE 3 s 8152 8096',
20196 'STATE 6 s 9353 9352',
20197 'STATE 6 c 8096 9354',
20198 'STATE 2 p 8160 9355',
20199 'STATE 3 i 8293 9356',
20200 'STATE 4 p 9358 9357',
20201 'STATE 3 l 8275 9359',
20202 'STATE 3 n 8160 9360',
20203 'STATE 4 h 8096 9361',
20204 'STATE 6 l 8096 8275',
20205 'STATE 3 c 8275 9362',
20206 'STATE 3 h 8094 9363',
20207 'STATE 6 n 9365 9364',
20208 'STATE 3 t 8720 9366',
20209 'STATE 5 s 8081 8275',
20210 'STATE 2 s 8906 8096',
20211 'STATE 2 c 8152 9367',
20212 'STATE 5 o 8275 8152',
20213 'STATE 2 r 8160 9368',
20214 'STATE 3 r 8152 9369',
20215 'STATE 6 e 8160 9370',
20216 'STATE 5 d 9372 9371',
20217 'STATE 5 s 9373 8160',
20218 'STATE 6 p 8160 9374',
20219 'STATE 5 t 8152 8160',
20220 'STATE 2 d 8160 9375',
20221 'STATE 3 r 8160 9376',
20222 'STATE 5 v 8075 8578',
20223 'STATE 2 m 8081 9377',
20224 'STATE 6 h 8075 9378',
20225 'STATE 1 c 8100 8075',
20226 'STATE 1 a 8147 9379',
20227 'STATE 5 n 8100 9380',
20228 'STATE 6 c 9382 9381',
20229 'STATE 3 e 8075 9383',
20230 'STATE 5 b 9385 9384',
20231 'STATE 6 n 8094 9386',
20232 'STATE 6 a 8094 8152',
20233 'STATE 2 h 8152 9387',
20234 'STATE 4 t 9388 8152',
20235 'STATE 6 e 8152 9389',
20236 'STATE 3 r 9391 9390',
20237 'STATE 3 d 8160 9392',
20238 'STATE 3 l 8160 9393',
20239 'STATE 5 i 9395 9394',
20240 'STATE 5 l 8096 8160',
20241 'STATE 6 t 8160 9396',
20242 'STATE 5 t 8275 9397',
20243 'STATE 5 s 8275 9398',
20244 'STATE 3 h 9400 9399',
20245 'STATE 3 p 8096 9401',
20246 'STATE 2 i 8152 9402',
20247 'STATE 6 o 9404 9403',
20248 'STATE 5 o 8275 9405',
20249 'STATE 2 n 8152 8094',
20250 'STATE 3 r 8152 9406',
20251 'STATE 5 c 8096 8152',
20252 'STATE 6 e 8160 9407',
20253 'STATE 6 # 8100 9408',
20254 'STATE 6 o 8275 9409',
20255 'STATE 1 m 9411 9410',
20256 'STATE 4 l 8160 9412',
20257 'STATE 2 i 8160 9413',
20258 'STATE 4 p 8096 9414',
20259 'STATE 3 t 8275 9415',
20260 'STATE 4 b 8096 9416',
20261 'STATE 4 f 9418 9417',
20262 'STATE 3 d 8100 9419',
20263 'STATE 1 r 8147 9420',
20264 'STATE 3 c 8275 8096',
20265 'STATE 2 i 8100 9421',
20266 'STATE 5 r 9423 9422',
20267 'STATE 4 t 9425 9424',
20268 'STATE 3 d 8152 9426',
20269 'STATE 3 l 8152 8275',
20270 'STATE 3 h 8100 9427',
20271 'STATE 6 h 8100 9428',
20272 'STATE 6 u 8152 9429',
20273 'STATE 5 t 8152 9002',
20274 'STATE 6 e 8152 9430',
20275 'STATE 6 n 8275 9431',
20276 'STATE 4 v 8152 8275',
20277 'STATE 6 e 9433 9432',
20278 'STATE 5 f 9434 8275',
20279 'STATE 6 a 8295 8275',
20280 'STATE 6 a 8275 9435',
20281 'STATE 6 l 9437 9436',
20282 'STATE 3 p 8160 8275',
20283 'STATE 4 s 8160 9438',
20284 'STATE 2 t 8275 9439',
20285 'STATE 4 g 8160 9440',
20286 'STATE 3 h 9442 9441',
20287 'STATE 2 p 8152 8275',
20288 'STATE 4 d 8096 8275',
20289 'STATE 6 d 8160 8096',
20290 'STATE 6 e 8152 9443',
20291 'STATE 4 g 8152 9444',
20292 'STATE 3 l 8094 8275',
20293 'STATE 5 l 8081 9445',
20294 'STATE 2 c 8081 8275',
20295 'STATE 3 m 8275 8081',
20296 'STATE 6 s 8275 9446',
20297 'STATE 2 l 8160 9447',
20298 'STATE 3 l 8152 9448',
20299 'STATE 6 s 9449 8152',
20300 'STATE 3 s 8100 8152',
20301 'STATE 6 l 8152 9450',
20302 'STATE 1 i 8152 8160',
20303 'STATE 6 t 8152 9451',
20304 'STATE 2 h 8160 9452',
20305 'STATE 3 n 8152 8295',
20306 'STATE 1 r 8081 9453',
20307 'STATE 1 e 9455 9454',
20308 'STATE 1 h 8075 9456',
20309 'STATE 3 s 8100 9457',
20310 'STATE 5 i 9459 9458',
20311 'STATE 4 g 8152 9460',
20312 'STATE 5 r 9462 9461',
20313 'STATE 1 0 9464 9463',
20314 'STATE 1 c 8094 9465',
20315 'STATE 1 e 9467 9466',
20316 'STATE 6 o 8152 9468',
20317 'STATE 3 l 8152 8100',
20318 'STATE 6 o 8295 8152',
20319 'STATE 4 t 9470 9469',
20320 'STATE 5 h 8147 9471',
20321 'STATE 2 l 9259 9472',
20322 'STATE 4 m 8160 9473',
20323 'STATE 5 u 9475 9474',
20324 'STATE 6 s 9477 9476',
20325 'STATE 3 r 9479 9478',
20326 'STATE 6 a 9481 9480',
20327 'STATE 3 p 9482 8160',
20328 'STATE 5 l 8816 9483',
20329 'STATE 2 c 8152 9484',
20330 'STATE 6 t 8096 9485',
20331 'STATE 3 t 8152 9486',
20332 'STATE 5 o 9212 9487',
20333 'STATE 5 c 8160 9488',
20334 'STATE 5 t 9490 9489',
20335 'STATE 5 t 8603 9491',
20336 'STATE 2 o 8152 9492',
20337 'STATE 2 b 8152 8100',
20338 'STATE 1 # 8275 9493',
20339 'STATE 1 s 9495 9494',
20340 'STATE 2 o 8160 8152',
20341 'STATE 3 t 8096 8275',
20342 'STATE 1 i 8160 8275',
20343 'STATE 6 l 8152 9496',
20344 'STATE 3 l 8275 9497',
20345 'STATE 4 p 9499 9498',
20346 'STATE 3 t 8152 9500',
20347 'STATE 3 h 8160 8147',
20348 'STATE 2 a 8147 9501',
20349 'STATE 3 h 8147 9259',
20350 'STATE 1 a 8100 8147',
20351 'STATE 4 g 9503 9502',
20352 'STATE 3 r 8295 9504',
20353 'STATE 6 i 9506 9505',
20354 'STATE 3 r 8100 9507',
20355 'STATE 6 n 8096 9508',
20356 'STATE 6 e 8152 9509',
20357 'STATE 3 c 9511 9510',
20358 'STATE 6 i 8100 8275',
20359 'STATE 3 r 9513 9512',
20360 'STATE 6 t 8816 9514',
20361 'STATE 3 r 9516 9515',
20362 'STATE 4 c 8275 9517',
20363 'STATE 3 g 8152 8275',
20364 'STATE 6 v 8152 9518',
20365 'STATE 3 r 9520 9519',
20366 'STATE 4 t 8275 9521',
20367 'STATE 2 c 8275 9522',
20368 'STATE 6 n 8160 8096',
20369 'STATE 6 e 8096 9523',
20370 'STATE 4 d 8152 9524',
20371 'STATE 4 b 8275 8152',
20372 'STATE 4 c 9526 9525',
20373 'STATE 3 h 8152 8275',
20374 'STATE 1 r 8081 9527',
20375 'STATE 2 e 8152 9528',
20376 'STATE 3 h 8152 9212',
20377 'STATE 5 d 8160 8152',
20378 'STATE 1 a 8152 8774',
20379 'STATE 6 r 8152 9529',
20380 'STATE 6 h 8152 9530',
20381 'STATE 1 e 9531 8160',
20382 'STATE 1 i 8081 8200',
20383 'STATE 6 o 8100 9532',
20384 'STATE 5 i 9534 9533',
20385 'STATE 1 n 8075 8100',
20386 'STATE 5 i 8100 9535',
20387 'STATE 5 h 9537 9536',
20388 'STATE 4 g 9539 9538',
20389 'STATE 4 t 8152 9540',
20390 'STATE 4 v 8295 9541',
20391 'STATE 1 p 8275 9542',
20392 'STATE 6 c 8152 9543',
20393 'STATE 5 i 8096 8152',
20394 'STATE 2 a 8100 8152',
20395 'STATE 5 b 8160 9544',
20396 'STATE 6 u 8160 8094',
20397 'STATE 2 a 8152 8275',
20398 'STATE 4 m 9546 9545',
20399 'STATE 2 c 8100 9547',
20400 'STATE 4 f 8100 9548',
20401 'STATE 3 n 8160 9549',
20402 'STATE 4 d 8160 9550',
20403 'STATE 5 h 9552 9551',
20404 'STATE 6 l 8152 9553',
20405 'STATE 4 h 8096 9554',
20406 'STATE 4 m 8152 8160',
20407 'STATE 3 l 8160 9555',
20408 'STATE 2 p 9556 8275',
20409 'STATE 6 c 9558 9557',
20410 'STATE 5 l 9107 8275',
20411 'STATE 2 o 8152 9559',
20412 'STATE 5 t 8275 9560',
20413 'STATE 5 m 8275 9561',
20414 'STATE 6 # 9562 8275',
20415 'STATE 1 o 8152 9563',
20416 'STATE 6 h 8160 9564',
20417 'STATE 2 c 8160 9565',
20418 'PHONE ih',
20419 'STATE 2 n 8275 9566',
20420 'STATE 5 o 8096 9567',
20421 'STATE 3 l 8100 9568',
20422 'STATE 3 l 8275 9569',
20423 'STATE 4 t 9571 9570',
20424 'STATE 4 t 8160 8152',
20425 'STATE 6 h 8152 9572',
20426 'STATE 4 c 8152 9573',
20427 'STATE 1 # 9574 8160',
20428 'STATE 1 y 8160 8096',
20429 'STATE 2 s 9576 9575',
20430 'STATE 3 r 8160 9577',
20431 'STATE 5 y 9579 9578',
20432 'STATE 3 d 9581 9580',
20433 'STATE 3 c 8275 9582',
20434 'STATE 3 k 8152 9583',
20435 'STATE 4 p 8160 8152',
20436 'STATE 3 m 9585 9584',
20437 'STATE 4 b 9587 9586',
20438 'STATE 3 g 8152 9588',
20439 'STATE 5 q 8152 9589',
20440 'STATE 6 a 8100 9590',
20441 'STATE 6 # 8100 9591',
20442 'STATE 6 i 8100 8152',
20443 'STATE 3 p 9593 9592',
20444 'STATE 6 f 9595 9594',
20445 'STATE 4 b 8152 9596',
20446 'STATE 3 r 8275 9187',
20447 'STATE 3 s 8275 9597',
20448 'STATE 6 t 8096 9598',
20449 'STATE 4 b 8152 8275',
20450 'STATE 4 c 8275 8160',
20451 'STATE 4 b 8096 9599',
20452 'STATE 6 n 9601 9600',
20453 'STATE 1 # 9602 8275',
20454 'STATE 6 m 9604 9603',
20455 'STATE 6 a 8275 8100',
20456 'STATE 6 r 8632 9605',
20457 'STATE 5 o 9607 9606',
20458 'STATE 3 r 8295 8152',
20459 'STATE 6 a 9609 9608',
20460 'STATE 3 n 8152 8160',
20461 'STATE 1 h 8075 9610',
20462 'STATE 6 # 8075 8100',
20463 'STATE 3 r 8075 8100',
20464 'STATE 5 m 8100 8317',
20465 'STATE 5 r 9612 9611',
20466 'STATE 4 t 9614 9613',
20467 'STATE 6 a 8275 9615',
20468 'STATE 3 l 8160 8275',
20469 'STATE 4 p 8152 9616',
20470 'STATE 4 d 8160 9617',
20471 'STATE 1 e 8275 8160',
20472 'STATE 2 e 8152 9618',
20473 'STATE 2 n 9620 9619',
20474 'STATE 4 k 8275 9621',
20475 'STATE 5 s 8160 9622',
20476 'STATE 3 c 9624 9623',
20477 'STATE 4 p 8152 9625',
20478 'STATE 2 r 8160 9626',
20479 'STATE 4 p 8160 8275',
20480 'STATE 5 r 9628 9627',
20481 'STATE 4 t 9630 9629',
20482 'STATE 6 c 8160 9631',
20483 'STATE 4 x 8152 9632',
20484 'STATE 2 s 8096 9633',
20485 'STATE 4 v 8160 8096',
20486 'STATE 1 0 9635 9634',
20487 'STATE 3 t 8275 8152',
20488 'STATE 2 a 8096 8160',
20489 'STATE 3 p 9636 8275',
20490 'STATE 1 e 8096 9637',
20491 'STATE 3 f 8275 9638',
20492 'STATE 2 b 8160 9639',
20493 'STATE 3 r 9641 9640',
20494 'STATE 5 t 8100 8152',
20495 'STATE 3 m 8275 9642',
20496 'STATE 5 y 8096 8100',
20497 'STATE 6 # 9643 8971',
20498 'STATE 6 n 8160 8816',
20499 'STATE 6 b 8160 9644',
20500 'STATE 1 i 8096 8152',
20501 'STATE 4 l 8152 8096',
20502 'STATE 6 s 8275 9645',
20503 'STATE 4 l 8160 8096',
20504 'STATE 3 p 8152 9646',
20505 'STATE 3 h 8152 9647',
20506 'STATE 2 r 8295 8152',
20507 'STATE 5 l 9649 9648',
20508 'STATE 4 p 8152 9650',
20509 'STATE 5 l 9651 8152',
20510 'STATE 6 i 8100 9652',
20511 'STATE 6 e 8152 9653',
20512 'STATE 4 c 9655 9654',
20513 'STATE 3 n 8094 9656',
20514 'STATE 6 e 8094 8100',
20515 'STATE 6 s 8275 9657',
20516 'STATE 3 r 8152 8096',
20517 'STATE 3 m 8152 8100',
20518 'STATE 6 o 9659 9658',
20519 'STATE 5 t 9661 9660',
20520 'STATE 3 b 8100 9662',
20521 'STATE 3 k 8160 9663',
20522 'STATE 4 p 8152 8160',
20523 'STATE 6 l 9665 9664',
20524 'STATE 3 c 8275 8152',
20525 'STATE 4 s 8152 8096',
20526 'STATE 6 e 8275 9444',
20527 'STATE 4 d 9667 9666',
20528 'STATE 2 r 8096 9668',
20529 'STATE 3 l 8275 9669',
20530 'STATE 2 r 8275 9107',
20531 'STATE 3 r 8275 9670',
20532 'STATE 3 m 8160 9671',
20533 'STATE 4 l 8160 8275',
20534 'STATE 3 r 8081 9672',
20535 'STATE 6 a 9674 9673',
20536 'STATE 6 m 8152 8346',
20537 'STATE 6 o 9676 9675',
20538 'STATE 5 t 8160 8295',
20539 'STATE 2 a 8075 9677',
20540 'STATE 4 h 9679 9678',
20541 'STATE 6 a 9681 9680',
20542 'STATE 1 0 8152 9682',
20543 'STATE 6 e 9684 9683',
20544 'STATE 4 t 9686 9685',
20545 'STATE 1 e 8152 9687',
20546 'STATE 5 o 8160 9688',
20547 'STATE 5 i 9690 9689',
20548 'STATE 6 a 8152 8160',
20549 'STATE 1 o 8160 9691',
20550 'STATE 4 h 9693 9692',
20551 'STATE 5 b 8160 8152',
20552 'STATE 5 s 9694 8160',
20553 'STATE 1 a 8152 9695',
20554 'STATE 5 s 8160 8152',
20555 'STATE 2 b 8160 9696',
20556 'STATE 4 h 8275 9697',
20557 'STATE 4 t 8096 9698',
20558 'STATE 3 i 8096 9699',
20559 'STATE 3 r 9585 9700',
20560 'STATE 6 s 8275 9701',
20561 'STATE 3 i 8160 9702',
20562 'STATE 4 d 8275 8160',
20563 'STATE 6 d 8152 9703',
20564 'STATE 5 l 8152 9704',
20565 'STATE 5 i 8160 8275',
20566 'STATE 1 c 8096 8275',
20567 'STATE 3 h 8275 9705',
20568 'STATE 1 e 8152 9706',
20569 'STATE 3 g 8096 9707',
20570 'STATE 2 e 8096 9708',
20571 'STATE 3 p 8275 8100',
20572 'STATE 3 r 8160 8152',
20573 'STATE 4 s 8160 9709',
20574 'STATE 6 r 8096 9710',
20575 'STATE 2 a 8160 9711',
20576 'STATE 4 t 8152 8160',
20577 'STATE 5 c 9713 9712',
20578 'STATE 4 b 9651 8152',
20579 'STATE 4 b 9714 8275',
20580 'STATE 6 e 8275 8152',
20581 'STATE 5 g 8100 8152',
20582 'STATE 6 i 8152 9715',
20583 'STATE 3 s 8152 9716',
20584 'STATE 6 e 8152 9717',
20585 'STATE 6 e 9718 8152',
20586 'STATE 4 g 8275 9719',
20587 'STATE 5 u 8275 9720',
20588 'STATE 3 r 8152 9721',
20589 'STATE 5 m 9722 8152',
20590 'STATE 6 u 8295 9723',
20591 'STATE 3 g 8152 9724',
20592 'STATE 6 o 8160 9725',
20593 'STATE 3 k 9727 9726',
20594 'STATE 3 m 8275 8152',
20595 'STATE 4 k 8160 9728',
20596 'STATE 6 r 8096 8160',
20597 'STATE 2 e 8160 9729',
20598 'STATE 3 r 8275 8771',
20599 'STATE 2 s 8275 8160',
20600 'STATE 2 # 9731 9730',
20601 'STATE 6 # 8275 9732',
20602 'STATE 5 m 8160 9733',
20603 'STATE 3 d 8152 8160',
20604 'STATE 5 f 8160 9734',
20605 'STATE 5 f 8160 9735',
20606 'STATE 6 s 8931 9736',
20607 'STATE 5 o 9738 9737',
20608 'STATE 5 o 8160 8275',
20609 'STATE 1 h 9489 9739',
20610 'STATE 2 c 8096 9740',
20611 'STATE 4 c 9742 9741',
20612 'STATE 6 a 8160 8152',
20613 'STATE 2 y 8152 9743',
20614 'STATE 6 t 9745 9744',
20615 'STATE 3 m 8275 9746',
20616 'STATE 4 b 9747 8160',
20617 'STATE 4 t 8152 9748',
20618 'STATE 3 r 8152 9162',
20619 'STATE 3 t 8160 9749',
20620 'STATE 6 e 8152 9234',
20621 'STATE 2 a 8295 9750',
20622 'STATE 3 s 8160 8096',
20623 'STATE 3 i 8160 9751',
20624 'STATE 2 s 8160 9752',
20625 'STATE 2 s 8152 9753',
20626 'STATE 2 p 9755 9754',
20627 'STATE 2 b 8152 9756',
20628 'STATE 2 e 8160 9757',
20629 'STATE 2 c 8275 8152',
20630 'STATE 4 q 8160 8096',
20631 'STATE 3 r 9759 9758',
20632 'STATE 5 l 9761 9760',
20633 'STATE 5 i 9763 9762',
20634 'STATE 2 e 8275 8415',
20635 'STATE 2 u 8152 9764',
20636 'STATE 6 r 8275 9765',
20637 'STATE 2 u 8096 9766',
20638 'STATE 1 l 8275 9767',
20639 'STATE 3 r 8275 8096',
20640 'STATE 1 b 8295 9768',
20641 'STATE 4 z 8152 9769',
20642 'STATE 4 c 9770 8152',
20643 'STATE 6 # 8275 8160',
20644 'STATE 6 a 9071 8160',
20645 'STATE 4 p 8275 8152',
20646 'STATE 6 a 8275 8152',
20647 'STATE 3 b 8152 8094',
20648 'STATE 4 c 8096 9771',
20649 'STATE 3 t 8096 9772',
20650 'STATE 3 m 8152 8126',
20651 'STATE 6 o 8100 8295',
20652 'STATE 6 e 8100 9773',
20653 'STATE 3 m 8100 9513',
20654 'STATE 3 c 8275 9774',
20655 'STATE 4 d 9776 9775',
20656 'STATE 6 n 8160 8275',
20657 'STATE 6 r 8275 9777',
20658 'STATE 1 o 8160 9778',
20659 'STATE 6 a 8152 9779',
20660 'STATE 3 t 8160 8275',
20661 'STATE 5 e 8275 8096',
20662 'STATE 3 s 8160 9780',
20663 'STATE 6 i 8160 9781',
20664 'STATE 5 s 8160 9782',
20665 'STATE 3 i 8100 9783',
20666 'STATE 5 y 9785 9784',
20667 'STATE 4 p 9787 9786',
20668 'STATE 1 a 8160 9788',
20669 'STATE 2 l 8152 9789',
20670 'STATE 1 p 8096 9790',
20671 'STATE 1 u 8096 9791',
20672 'STATE 2 d 8094 9792',
20673 'STATE 6 e 9794 9793',
20674 'STATE 4 v 8160 9795',
20675 'STATE 3 v 8275 8160',
20676 'STATE 1 0 8160 8275',
20677 'STATE 6 t 8152 8275',
20678 'STATE 2 o 8160 9796',
20679 'STATE 3 l 8160 9797',
20680 'STATE 3 g 8160 8152',
20681 'STATE 2 i 8295 8152',
20682 'STATE 1 s 8152 9798',
20683 'STATE 3 i 8275 9799',
20684 'STATE 5 l 9800 8152',
20685 'STATE 4 p 8160 9801',
20686 'STATE 2 p 8152 9802',
20687 'STATE 2 a 8152 9167',
20688 'STATE 6 c 8152 9803',
20689 'STATE 6 k 8275 9804',
20690 'STATE 3 r 8275 9805',
20691 'STATE 5 y 8096 8275',
20692 'STATE 6 v 8096 8152',
20693 'STATE 1 r 8152 9411',
20694 'STATE 6 s 8275 9806',
20695 'STATE 2 t 8160 8275',
20696 'STATE 4 h 8160 9807',
20697 'STATE 1 c 8152 9808',
20698 'STATE 6 o 8152 9809',
20699 'STATE 6 i 8275 9810',
20700 'STATE 4 q 8096 8275',
20701 'STATE 5 c 8096 9811',
20702 'STATE 6 l 8100 8152',
20703 'STATE 4 b 8275 9812',
20704 'STATE 4 p 8275 9813',
20705 'STATE 6 n 8096 8160',
20706 'STATE 4 l 9815 9814',
20707 'STATE 2 s 8160 9816',
20708 'STATE 6 s 8152 8275',
20709 'STATE 5 h 8160 9817',
20710 'STATE 5 c 8160 9818',
20711 'STATE 5 t 8160 8152',
20712 'STATE 1 d 8100 9819',
20713 'STATE 5 l 9821 9820',
20714 'STATE 4 d 8096 9822',
20715 'STATE 1 0 9824 9823',
20716 'STATE 6 u 8152 9825',
20717 'STATE 6 o 9827 9826',
20718 'STATE 1 o 8152 9828',
20719 'STATE 3 r 8160 9829',
20720 'STATE 3 r 9830 8703',
20721 'STATE 1 0 8094 8160',
20722 'STATE 4 v 8096 9831',
20723 'STATE 1 t 8152 9832',
20724 'STATE 4 c 8152 9833',
20725 'STATE 2 p 8160 9834',
20726 'STATE 1 e 8160 8152',
20727 'STATE 1 n 8152 9835',
20728 'STATE 5 y 8100 9836',
20729 'STATE 4 c 8096 8152',
20730 'STATE 6 e 8160 9837',
20731 'STATE 6 e 8152 9838',
20732 'STATE 2 p 9839 8275',
20733 'STATE 5 p 8275 9840',
20734 'STATE 1 m 8152 9841',
20735 'STATE 1 e 8160 9842',
20736 'STATE 2 s 8160 9843',
20737 'STATE 3 i 8160 9844',
20738 'STATE 5 z 9651 8152',
20739 'STATE 6 a 8152 8275',
20740 'STATE 3 m 9846 9845',
20741 'STATE 4 k 9848 9847',
20742 'STATE 4 c 8275 9849',
20743 'STATE 6 n 8275 9850',
20744 'STATE 6 n 8096 9851',
20745 'STATE 4 t 9439 9852',
20746 'STATE 2 r 8160 9853',
20747 'STATE 6 l 8152 8160',
20748 'STATE 1 o 9855 9854',
20749 'STATE 4 b 9857 9856',
20750 'STATE 3 r 9859 9858',
20751 'STATE 4 t 8160 9860',
20752 'STATE 1 o 8152 9861',
20753 'STATE 4 d 9863 9862',
20754 'STATE 3 n 8152 9864',
20755 'STATE 1 0 8152 9865',
20756 'STATE 1 i 8096 9866',
20757 'STATE 3 n 9868 9867',
20758 'STATE 2 s 8152 8160',
20759 'STATE 6 e 9869 8275',
20760 'STATE 3 m 9871 9870',
20761 'STATE 4 d 8152 9872',
20762 'STATE 4 d 8152 8096',
20763 'STATE 3 d 8160 8096',
20764 'STATE 3 l 8152 9873',
20765 'STATE 4 m 9389 9874',
20766 'STATE 4 g 8275 8160',
20767 'STATE 2 b 8152 9875',
20768 'STATE 4 f 8152 9876',
20769 'STATE 2 o 8160 9877',
20770 'STATE 3 c 8160 9878',
20771 'STATE 2 i 8096 9879',
20772 'STATE 3 c 8160 9880',
20773 'STATE 2 d 8152 9881',
20774 'STATE 6 i 9882 8152',
20775 'STATE 5 t 8152 9651',
20776 'STATE 6 s 8275 9883',
20777 'STATE 3 s 8152 8275',
20778 'STATE 3 s 8096 9884',
20779 'STATE 6 b 8275 9885',
20780 'STATE 6 k 8275 8152',
20781 'STATE 1 i 8160 9886',
20782 'STATE 3 t 8160 8152',
20783 'STATE 5 n 9888 9887',
20784 'STATE 6 # 8100 8075',
20785 'STATE 5 u 9890 9889',
20786 'STATE 6 e 8160 9891',
20787 'STATE 6 e 9893 9892',
20788 'STATE 4 p 8160 8096',
20789 'STATE 4 g 8160 9894',
20790 'STATE 1 r 8160 9895',
20791 'STATE 6 n 8096 8275',
20792 'STATE 6 r 8275 8152',
20793 'STATE 2 h 8160 9896',
20794 'STATE 1 e 8096 8160',
20795 'STATE 1 u 8096 8160',
20796 'STATE 1 a 8152 9897',
20797 'STATE 2 a 8152 8160',
20798 'STATE 1 e 8160 8096',
20799 'STATE 4 k 8275 9898',
20800 'STATE 2 o 8096 8275',
20801 'STATE 1 0 8275 8096',
20802 'STATE 2 y 8152 9899',
20803 'STATE 5 l 9162 8152',
20804 'STATE 4 c 8152 8275',
20805 'STATE 6 n 8152 9900',
20806 'STATE 6 s 9902 9901',
20807 'STATE 1 o 8160 9903',
20808 'STATE 1 i 8096 9904',
20809 'STATE 1 c 9906 9905',
20810 'STATE 3 s 8152 9907',
20811 'STATE 5 h 8275 8152',
20812 'STATE 6 l 8718 9908',
20813 'STATE 3 t 8160 9909',
20814 'STATE 3 m 8096 9910',
20815 'STATE 4 c 8096 9911',
20816 'STATE 6 # 8100 9912',
20817 'STATE 2 t 8075 9913',
20818 'STATE 1 0 9915 9914',
20819 'STATE 4 g 9917 9916',
20820 'STATE 5 s 9918 8152',
20821 'STATE 1 0 8644 9919',
20822 'STATE 4 g 8275 9920',
20823 'STATE 4 c 8160 8096',
20824 'STATE 1 l 8275 9921',
20825 'STATE 6 l 9797 8160',
20826 'STATE 3 l 8160 9922',
20827 'STATE 2 e 8275 9923',
20828 'STATE 1 e 8152 9259',
20829 'STATE 4 v 8160 8152',
20830 'STATE 3 t 8096 9924',
20831 'STATE 2 m 8160 9925',
20832 'STATE 2 s 8152 9444',
20833 'STATE 6 a 8100 9926',
20834 'STATE 6 c 8096 9927',
20835 'STATE 2 t 8096 8275',
20836 'STATE 3 b 8295 9928',
20837 'STATE 6 r 8275 8774',
20838 'STATE 3 j 8096 8275',
20839 'STATE 6 m 8096 8275',
20840 'STATE 2 i 8160 8293',
20841 'STATE 2 r 8075 9929',
20842 'STATE 1 n 8100 9930',
20843 'STATE 2 e 9932 9931',
20844 'STATE 6 r 8160 9933',
20845 'STATE 1 0 8096 9934',
20846 'STATE 3 l 8100 8152',
20847 'STATE 6 t 8160 8152',
20848 'STATE 6 i 8275 8160',
20849 'STATE 3 n 8275 8160',
20850 'STATE 4 c 8096 9935',
20851 'STATE 3 m 9937 9936',
20852 'STATE 1 i 8096 9938',
20853 'STATE 5 o 8160 9939',
20854 'STATE 2 a 9941 9940',
20855 'STATE 2 o 8152 9942',
20856 'STATE 3 r 9943 8096',
20857 'STATE 2 g 8160 9944',
20858 'STATE 2 b 8100 9945',
20859 'STATE 2 n 8100 9946',
20860 'STATE 6 o 9521 9947',
20861 'STATE 1 r 8160 8152',
20862 'STATE 5 c 9683 8152',
20863 'STATE 3 p 8152 9948',
20864 'STATE 6 s 8096 9949',
20865 'STATE 3 t 9951 9950',
20866 'STATE 4 c 8160 8152',
20867 'STATE 6 o 9953 9952',
20868 'STATE 6 z 8160 9954',
20869 'STATE 2 e 8152 8160',
20870 'STATE 3 b 8152 8160',
20871 'STATE 3 c 8152 8275',
20872 'STATE 2 t 8096 9955',
20873 'STATE 2 e 8160 9956',
20874 'STATE 2 t 8100 9957',
20875 'STATE 1 l 8100 9958',
20876 'STATE 4 f 8100 9959',
20877 'STATE 4 c 9918 9198',
20878 'STATE 6 r 8160 9960',
20879 'STATE 4 g 8160 9643',
20880 'STATE 4 c 8160 9961',
20881 'STATE 2 t 8160 9962',
20882 'STATE 4 b 8160 8275',
20883 'STATE 1 c 8160 9963',
20884 'STATE 6 n 9964 8096',
20885 'STATE 2 h 8160 9965',
20886 'STATE 6 n 8100 9966',
20887 'STATE 1 i 8075 9967',
20888 'STATE 6 s 8152 9968',
20889 'STATE 1 m 8160 9969',
20890 'STATE 1 m 8152 8160',
20891 'STATE 3 t 8096 9970',
20892 'STATE 3 v 8152 9971',
20893 'STATE 2 c 8096 8160',
20894 'STATE 2 r 8160 9972',
20895 'STATE 1 m 8100 8075',
20896 'STATE 2 y 8075 9973',
20897 'STATE 1 a 9975 9974',
20898 'STATE 2 e 8160 9976',
20899 'STATE 1 e 8160 9977',
20900 'STATE 6 n 9979 9978',
20901 'STATE 4 d 8152 9980',
20902 'STATE 1 a 8075 9981',
20903 'STATE 3 n 8152 9982',
20904 'STATE 2 l 8152 9983',
20905 'STATE 4 b 8096 9984',
20906 'STATE 1 0 8096 9985',
20907 'STATE 2 n 8160 9986',
20908 'STATE 3 r 8275 9987',
20909 'STATE 2 l 8160 9988',
20910 'STATE 3 h 8100 8075',
20911 'STATE 2 o 9989 8152',
20912 'STATE 6 i 8275 8152',
20913 'STATE 4 d 9198 9990',
20914 'STATE 6 n 8160 9991',
20915 'STATE 2 p 8096 8275',
20916 'STATE 3 i 8160 9992',
20917 'STATE 1 p 8160 9993',
20918 'STATE 5 n 8275 8152',
20919 'STATE 3 r 8160 9994',
20920 'STATE 2 h 8096 8160',
20921 'STATE 1 # 8160 8096',
20922 'STATE 3 r 8160 9995',
20923 'STATE 3 t 8096 8160',
20924 'STATE 1 g 8160 9996',
20925 'STATE 3 l 8152 9997',
20926 'STATE 3 n 8295 8160',
20927 'INDEX 9998 p',
20928 'STATE 4 p 10000 9999',
20929 'STATE 4 h 10002 10001',
20930 'PHONE epsilon',
20931 'STATE 4 f 10004 10003',
20932 'STATE 2 # 10006 10005',
20933 'STATE 4 s 10008 10007',
20934 'STATE 2 0 10000 10009',
20935 'STATE 2 h 10011 10010',
20936 'STATE 3 u 10009 10010',
20937 'STATE 3 p 10009 10012',
20938 'STATE 2 0 10000 10013',
20939 'PHONE p',
20940 'PHONE f',
20941 'STATE 3 e 10009 10010',
20942 'STATE 4 t 10004 10014',
20943 'STATE 2 o 10015 10009',
20944 'STATE 4 b 10017 10016',
20945 'STATE 3 r 10000 10009',
20946 'STATE 4 n 10004 10009',
20947 'STATE 2 a 10000 10009',
20948 'INDEX 10018 q',
20949 'PHONE k',
20950 'INDEX 10019 r',
20951 'STATE 3 e 10021 10020',
20952 'STATE 4 r 10023 10022',
20953 'STATE 1 # 10025 10024',
20954 'STATE 1 0 10027 10026',
20955 'STATE 2 c 10029 10028',
20956 'STATE 4 # 10031 10030',
20957 'STATE 4 r 10033 10032',
20958 'STATE 3 u 10035 10034',
20959 'STATE 3 u 10037 10036',
20960 'STATE 1 0 10029 10038',
20961 'PHONE epsilon',
20962 'STATE 4 r 10040 10039',
20963 'STATE 2 e 10042 10041',
20964 'STATE 4 i 10044 10043',
20965 'STATE 2 p 10046 10045',
20966 'STATE 3 o 10048 10047',
20967 'STATE 1 # 10050 10049',
20968 'STATE 3 i 10052 10051',
20969 'STATE 4 i 10029 10053',
20970 'STATE 2 b 10029 10054',
20971 'STATE 4 i 10056 10055',
20972 'STATE 2 v 10058 10057',
20973 'STATE 2 i 10058 10059',
20974 'PHONE r',
20975 'STATE 4 e 10061 10060',
20976 'STATE 2 p 10063 10062',
20977 'STATE 2 t 10029 10064',
20978 'STATE 5 i 10058 10065',
20979 'STATE 3 i 10067 10066',
20980 'STATE 2 w 10069 10068',
20981 'STATE 2 o 10071 10070',
20982 'STATE 4 i 10073 10072',
20983 'STATE 3 a 10075 10074',
20984 'STATE 4 o 10058 10076',
20985 'STATE 4 a 10042 10077',
20986 'STATE 3 a 10079 10078',
20987 'STATE 2 i 10081 10080',
20988 'STATE 5 n 10083 10082',
20989 'STATE 1 n 10085 10084',
20990 'PHONE er',
20991 'STATE 2 u 10058 10086',
20992 'STATE 4 o 10088 10087',
20993 'STATE 2 p 10058 10089',
20994 'STATE 5 v 10058 10090',
20995 'STATE 5 o 10042 10091',
20996 'STATE 2 g 10042 10092',
20997 'STATE 5 e 10058 10093',
20998 'STATE 3 r 10095 10094',
20999 'STATE 2 a 10042 10096',
21000 'STATE 1 # 10098 10097',
21001 'STATE 1 # 10093 10099',
21002 'STATE 2 a 10101 10100',
21003 'STATE 1 j 10093 10102',
21004 'STATE 4 o 10042 10103',
21005 'STATE 2 k 10058 10042',
21006 'STATE 4 z 10105 10104',
21007 'STATE 4 o 10107 10106',
21008 'STATE 5 i 10093 10108',
21009 'STATE 4 b 10058 10109',
21010 'STATE 2 w 10029 10110',
21011 'STATE 2 g 10029 10111',
21012 'STATE 5 # 10113 10112',
21013 'STATE 4 s 10114 10042',
21014 'STATE 5 z 10058 10115',
21015 'STATE 2 e 10042 10116',
21016 'STATE 2 h 10117 10029',
21017 'STATE 5 e 10058 10029',
21018 'STATE 2 a 10042 10058',
21019 'STATE 4 a 10119 10118',
21020 'STATE 2 p 10121 10120',
21021 'STATE 2 t 10058 10122',
21022 'STATE 5 s 10124 10123',
21023 'STATE 5 s 10042 10058',
21024 'STATE 2 m 10029 10125',
21025 'PHONE er1',
21026 'STATE 3 a 10127 10126',
21027 'STATE 2 u 10129 10128',
21028 'STATE 4 e 10131 10130',
21029 'STATE 4 # 10133 10132',
21030 'STATE 4 o 10135 10134',
21031 'STATE 4 k 10093 10136',
21032 'STATE 4 e 10138 10137',
21033 'STATE 1 t 10058 10042',
21034 'STATE 5 s 10140 10139',
21035 'STATE 4 a 10042 10141',
21036 'STATE 3 o 10142 10042',
21037 'STATE 3 g 10093 10143',
21038 'STATE 5 s 10144 10042',
21039 'STATE 5 u 10058 10042',
21040 'STATE 4 a 10042 10145',
21041 'STATE 4 e 10029 10146',
21042 'STATE 2 d 10148 10147',
21043 'STATE 1 # 10150 10149',
21044 'STATE 1 0 10152 10151',
21045 'STATE 4 a 10154 10153',
21046 'STATE 5 # 10058 10042',
21047 'STATE 5 e 10156 10155',
21048 'STATE 1 t 10058 10157',
21049 'STATE 1 s 10042 10029',
21050 'STATE 2 p 10159 10158',
21051 'STATE 5 # 10042 10160',
21052 'STATE 5 u 10058 10161',
21053 'STATE 5 n 10042 10058',
21054 'STATE 5 s 10042 10162',
21055 'STATE 2 d 10042 10163',
21056 'STATE 2 d 10058 10042',
21057 'STATE 2 h 10029 10164',
21058 'STATE 5 # 10166 10165',
21059 'STATE 2 e 10168 10167',
21060 'STATE 1 c 10170 10169',
21061 'STATE 1 s 10058 10171',
21062 'STATE 4 a 10173 10172',
21063 'STATE 2 m 10042 10174',
21064 'STATE 4 s 10176 10175',
21065 'STATE 2 c 10042 10177',
21066 'STATE 4 a 10179 10178',
21067 'STATE 2 b 10180 10042',
21068 'STATE 4 t 10182 10181',
21069 'STATE 4 a 10184 10183',
21070 'STATE 2 t 10058 10185',
21071 'STATE 1 c 10187 10186',
21072 'STATE 1 n 10093 10042',
21073 'STATE 4 e 10042 10188',
21074 'STATE 5 g 10144 10042',
21075 'STATE 5 y 10058 10042',
21076 'STATE 4 i 10058 10042',
21077 'STATE 4 i 10042 10189',
21078 'STATE 5 u 10058 10093',
21079 'STATE 3 i 10190 10029',
21080 'STATE 5 a 10042 10029',
21081 'STATE 5 a 10029 10191',
21082 'STATE 2 f 10029 10192',
21083 'STATE 5 i 10194 10193',
21084 'STATE 4 a 10042 10195',
21085 'STATE 4 o 10042 10196',
21086 'STATE 2 h 10058 10042',
21087 'STATE 5 # 10042 10197',
21088 'STATE 2 p 10042 10058',
21089 'STATE 1 n 10058 10198',
21090 'STATE 4 u 10042 10199',
21091 'STATE 4 u 10058 10200',
21092 'STATE 2 d 10042 10201',
21093 'STATE 2 f 10058 10042',
21094 'STATE 2 j 10042 10202',
21095 'STATE 5 d 10058 10042',
21096 'STATE 2 c 10029 10203',
21097 'STATE 4 z 10058 10204',
21098 'STATE 4 e 10205 10042',
21099 'STATE 1 # 10207 10206',
21100 'STATE 4 n 10209 10208',
21101 'STATE 1 # 10211 10210',
21102 'STATE 2 a 10042 10212',
21103 'STATE 5 c 10058 10213',
21104 'STATE 4 o 10215 10214',
21105 'STATE 5 # 10042 10216',
21106 'STATE 5 c 10058 10217',
21107 'STATE 4 d 10219 10218',
21108 'STATE 5 # 10221 10220',
21109 'STATE 2 o 10042 10222',
21110 'STATE 2 c 10224 10223',
21111 'STATE 5 i 10058 10042',
21112 'STATE 5 w 10058 10093',
21113 'STATE 1 s 10042 10225',
21114 'STATE 1 s 10058 10226',
21115 'STATE 4 g 10228 10227',
21116 'STATE 5 # 10042 10229',
21117 'STATE 2 s 10231 10230',
21118 'STATE 1 f 10042 10232',
21119 'STATE 5 g 10093 10233',
21120 'STATE 2 s 10235 10234',
21121 'STATE 4 e 10042 10093',
21122 'STATE 5 e 10029 10236',
21123 'STATE 2 m 10029 10237',
21124 'STATE 2 t 10029 10238',
21125 'STATE 2 e 10042 10239',
21126 'STATE 4 s 10241 10240',
21127 'STATE 4 o 10042 10242',
21128 'STATE 4 e 10042 10243',
21129 'STATE 5 o 10042 10244',
21130 'STATE 2 f 10058 10245',
21131 'STATE 4 y 10042 10246',
21132 'STATE 4 l 10093 10247',
21133 'STATE 5 s 10042 10248',
21134 'STATE 2 d 10042 10249',
21135 'STATE 2 j 10029 10250',
21136 'STATE 3 y 10252 10251',
21137 'STATE 3 y 10042 10253',
21138 'STATE 4 # 10255 10254',
21139 'STATE 4 o 10257 10256',
21140 'STATE 5 h 10093 10258',
21141 'STATE 5 # 10259 10093',
21142 'STATE 2 a 10261 10260',
21143 'STATE 2 a 10262 10042',
21144 'STATE 4 i 10042 10263',
21145 'STATE 1 d 10029 10264',
21146 'STATE 4 i 10266 10265',
21147 'STATE 5 n 10267 10042',
21148 'STATE 1 d 10058 10268',
21149 'STATE 2 o 10042 10269',
21150 'STATE 4 a 10271 10270',
21151 'STATE 2 f 10272 10042',
21152 'STATE 5 h 10058 10042',
21153 'STATE 2 o 10042 10058',
21154 'STATE 2 t 10058 10273',
21155 'STATE 4 t 10042 10274',
21156 'STATE 4 s 10275 10042',
21157 'STATE 1 r 10093 10276',
21158 'STATE 1 t 10093 10277',
21159 'STATE 4 i 10279 10278',
21160 'STATE 2 b 10058 10093',
21161 'STATE 5 l 10058 10280',
21162 'STATE 1 i 10029 10281',
21163 'STATE 1 n 10042 10282',
21164 'STATE 5 e 10042 10283',
21165 'STATE 5 e 10284 10042',
21166 'STATE 4 y 10042 10285',
21167 'STATE 4 v 10058 10286',
21168 'STATE 1 # 10042 10029',
21169 'STATE 1 c 10029 10287',
21170 'STATE 5 # 10042 10288',
21171 'STATE 2 d 10058 10289',
21172 'STATE 2 s 10093 10290',
21173 'STATE 1 o 10058 10093',
21174 'STATE 4 u 10042 10291',
21175 'STATE 2 e 10042 10292',
21176 'STATE 5 a 10294 10293',
21177 'STATE 2 h 10058 10295',
21178 'STATE 5 a 10297 10296',
21179 'STATE 4 v 10058 10298',
21180 'STATE 2 p 10058 10299',
21181 'STATE 2 b 10121 10042',
21182 'STATE 2 k 10029 10300',
21183 'STATE 4 o 10042 10301',
21184 'STATE 4 n 10093 10302',
21185 'STATE 3 c 10058 10303',
21186 'STATE 4 d 10305 10304',
21187 'STATE 2 l 10058 10306',
21188 'STATE 4 a 10308 10307',
21189 'STATE 5 # 10042 10309',
21190 'STATE 4 l 10093 10310',
21191 'STATE 1 h 10058 10093',
21192 'STATE 1 f 10312 10311',
21193 'STATE 1 b 10042 10313',
21194 'STATE 4 o 10042 10314',
21195 'STATE 5 # 10042 10315',
21196 'STATE 5 l 10042 10316',
21197 'STATE 4 # 10042 10317',
21198 'STATE 2 p 10042 10318',
21199 'STATE 2 v 10042 10319',
21200 'STATE 5 t 10319 10320',
21201 'STATE 5 d 10058 10321',
21202 'STATE 5 z 10058 10322',
21203 'STATE 5 # 10154 10323',
21204 'STATE 5 # 10058 10324',
21205 'STATE 1 a 10325 10058',
21206 'STATE 5 r 10042 10326',
21207 'STATE 5 e 10058 10042',
21208 'STATE 5 # 10327 10093',
21209 'STATE 1 e 10093 10328',
21210 'STATE 4 y 10330 10329',
21211 'STATE 1 i 10029 10331',
21212 'STATE 5 t 10333 10332',
21213 'STATE 2 e 10093 10334',
21214 'STATE 1 s 10042 10058',
21215 'STATE 5 o 10042 10335',
21216 'STATE 4 s 10042 10093',
21217 'STATE 4 u 10042 10336',
21218 'STATE 5 e 10093 10337',
21219 'STATE 2 h 10029 10338',
21220 'STATE 2 j 10029 10339',
21221 'STATE 5 e 10341 10340',
21222 'STATE 4 m 10343 10342',
21223 'STATE 5 c 10042 10093',
21224 'STATE 4 s 10058 10344',
21225 'STATE 1 0 10042 10345',
21226 'STATE 2 l 10058 10042',
21227 'STATE 2 i 10042 10058',
21228 'STATE 5 o 10347 10346',
21229 'STATE 4 d 10042 10348',
21230 'STATE 4 f 10058 10349',
21231 'STATE 5 l 10042 10350',
21232 'STATE 5 e 10352 10351',
21233 'STATE 4 a 10354 10353',
21234 'STATE 4 t 10093 10355',
21235 'STATE 1 f 10058 10356',
21236 'STATE 5 t 10358 10357',
21237 'STATE 5 # 10360 10359',
21238 'STATE 2 g 10058 10361',
21239 'STATE 4 i 10363 10362',
21240 'STATE 2 h 10324 10364',
21241 'STATE 2 p 10366 10365',
21242 'STATE 1 l 10368 10367',
21243 'STATE 1 t 10370 10369',
21244 'STATE 5 d 10093 10371',
21245 'STATE 1 e 10058 10372',
21246 'STATE 5 v 10058 10373',
21247 'STATE 5 c 10058 10374',
21248 'STATE 5 t 10093 10375',
21249 'STATE 2 e 10042 10376',
21250 'STATE 5 # 10042 10377',
21251 'STATE 1 # 10042 10058',
21252 'STATE 2 h 10042 10378',
21253 'STATE 2 f 10380 10379',
21254 'STATE 4 o 10382 10381',
21255 'STATE 5 t 10384 10383',
21256 'STATE 5 s 10058 10042',
21257 'STATE 2 d 10042 10058',
21258 'STATE 4 n 10042 10385',
21259 'STATE 4 d 10093 10058',
21260 'STATE 1 l 10058 10093',
21261 'STATE 4 o 10387 10386',
21262 'STATE 2 b 10042 10058',
21263 'STATE 2 c 10042 10388',
21264 'STATE 2 c 10029 10389',
21265 'STATE 2 t 10058 10029',
21266 'STATE 2 j 10058 10390',
21267 'STATE 1 p 10042 10391',
21268 'STATE 5 u 10393 10392',
21269 'STATE 4 m 10058 10394',
21270 'STATE 5 e 10029 10395',
21271 'STATE 5 i 10029 10396',
21272 'STATE 2 h 10398 10397',
21273 'STATE 2 o 10042 10399',
21274 'STATE 4 e 10042 10400',
21275 'STATE 1 e 10093 10401',
21276 'STATE 2 b 10058 10402',
21277 'STATE 2 d 10058 10403',
21278 'STATE 5 u 10405 10404',
21279 'STATE 2 v 10058 10406',
21280 'STATE 2 d 10093 10407',
21281 'STATE 4 n 10058 10408',
21282 'STATE 5 t 10042 10409',
21283 'STATE 2 d 10042 10410',
21284 'STATE 2 f 10042 10029',
21285 'STATE 5 c 10042 10411',
21286 'STATE 3 h 10412 10042',
21287 'STATE 4 o 10042 10413',
21288 'STATE 3 t 10058 10414',
21289 'STATE 4 s 10416 10415',
21290 'STATE 4 i 10418 10417',
21291 'STATE 2 w 10420 10419',
21292 'STATE 2 o 10042 10421',
21293 'STATE 2 n 10058 10422',
21294 'STATE 4 e 10275 10042',
21295 'STATE 5 t 10042 10423',
21296 'STATE 5 d 10425 10424',
21297 'STATE 2 m 10058 10426',
21298 'STATE 5 l 10058 10042',
21299 'STATE 4 s 10428 10427',
21300 'STATE 4 # 10058 10144',
21301 'STATE 1 w 10430 10429',
21302 'STATE 2 o 10042 10431',
21303 'STATE 5 r 10058 10432',
21304 'STATE 1 g 10042 10433',
21305 'STATE 4 i 10042 10058',
21306 'STATE 4 e 10435 10434',
21307 'STATE 4 e 10093 10436',
21308 'STATE 4 u 10042 10437',
21309 'STATE 1 a 10058 10438',
21310 'STATE 5 b 10042 10439',
21311 'STATE 5 s 10282 10440',
21312 'STATE 5 f 10042 10058',
21313 'STATE 1 s 10442 10441',
21314 'STATE 5 u 10444 10443',
21315 'STATE 1 o 10058 10445',
21316 'STATE 1 r 10058 10446',
21317 'STATE 4 g 10448 10447',
21318 'STATE 4 # 10450 10449',
21319 'STATE 2 e 10042 10451',
21320 'STATE 5 a 10042 10452',
21321 'STATE 1 a 10058 10042',
21322 'STATE 1 r 10029 10453',
21323 'STATE 1 s 10058 10454',
21324 'STATE 5 i 10093 10455',
21325 'STATE 2 p 10058 10093',
21326 'STATE 4 p 10058 10093',
21327 'STATE 1 s 10042 10456',
21328 'STATE 5 y 10029 10457',
21329 'STATE 4 v 10459 10458',
21330 'STATE 4 m 10093 10460',
21331 'STATE 2 b 10058 10461',
21332 'STATE 2 d 10058 10462',
21333 'STATE 1 x 10093 10463',
21334 'STATE 4 y 10058 10464',
21335 'STATE 5 s 10466 10465',
21336 'STATE 5 i 10468 10467',
21337 'STATE 4 m 10058 10469',
21338 'STATE 2 b 10470 10093',
21339 'STATE 2 c 10093 10471',
21340 'STATE 4 c 10065 10472',
21341 'STATE 2 g 10058 10473',
21342 'STATE 5 i 10029 10474',
21343 'STATE 4 # 10042 10475',
21344 'STATE 2 a 10058 10042',
21345 'STATE 2 m 10042 10476',
21346 'STATE 1 a 10058 10477',
21347 'STATE 5 z 10479 10478',
21348 'STATE 5 # 10480 10042',
21349 'STATE 1 s 10042 10481',
21350 'STATE 2 l 10042 10482',
21351 'STATE 5 s 10484 10483',
21352 'STATE 5 l 10058 10485',
21353 'STATE 2 w 10058 10486',
21354 'STATE 2 a 10042 10487',
21355 'STATE 2 p 10042 10488',
21356 'STATE 5 # 10042 10489',
21357 'STATE 2 p 10058 10042',
21358 'STATE 5 u 10058 10249',
21359 'STATE 4 # 10042 10490',
21360 'STATE 5 # 10042 10491',
21361 'STATE 1 u 10493 10492',
21362 'STATE 4 i 10093 10042',
21363 'STATE 2 i 10093 10494',
21364 'STATE 4 o 10042 10495',
21365 'STATE 5 s 10042 10496',
21366 'STATE 5 b 10058 10497',
21367 'STATE 5 s 10042 10498',
21368 'STATE 4 o 10500 10499',
21369 'STATE 4 y 10042 10501',
21370 'STATE 1 q 10058 10502',
21371 'STATE 5 l 10042 10503',
21372 'STATE 5 t 10058 10504',
21373 'STATE 2 b 10506 10505',
21374 'STATE 4 t 10042 10507',
21375 'STATE 2 b 10058 10508',
21376 'STATE 1 t 10093 10058',
21377 'STATE 5 b 10058 10509',
21378 'STATE 1 c 10058 10510',
21379 'STATE 5 z 10058 10511',
21380 'STATE 2 f 10179 10042',
21381 'STATE 4 u 10042 10512',
21382 'STATE 1 a 10058 10513',
21383 'STATE 5 # 10042 10058',
21384 'STATE 5 z 10058 10514',
21385 'STATE 1 e 10515 10042',
21386 'STATE 1 l 10058 10516',
21387 'STATE 4 v 10093 10517',
21388 'STATE 2 v 10042 10029',
21389 'STATE 2 d 10029 10518',
21390 'STATE 4 n 10520 10519',
21391 'STATE 5 a 10521 10058',
21392 'STATE 1 t 10523 10522',
21393 'STATE 2 t 10525 10524',
21394 'STATE 4 c 10527 10526',
21395 'STATE 2 t 10058 10528',
21396 'STATE 4 m 10093 10529',
21397 'STATE 1 l 10058 10530',
21398 'STATE 2 v 10042 10058',
21399 'STATE 5 e 10531 10093',
21400 'STATE 4 l 10228 10532',
21401 'STATE 2 m 10058 10093',
21402 'STATE 4 t 10058 10093',
21403 'STATE 2 f 10058 10533',
21404 'STATE 4 k 10093 10534',
21405 'STATE 5 r 10058 10535',
21406 'STATE 2 s 10042 10029',
21407 'STATE 3 d 10537 10536',
21408 'STATE 2 s 10538 10042',
21409 'STATE 3 d 10042 10539',
21410 'STATE 5 n 10541 10540',
21411 'STATE 4 i 10058 10542',
21412 'STATE 1 s 10042 10543',
21413 'STATE 1 i 10058 10544',
21414 'STATE 2 m 10042 10545',
21415 'STATE 5 l 10058 10546',
21416 'STATE 1 b 10042 10547',
21417 'STATE 1 k 10058 10548',
21418 'STATE 2 c 10042 10549',
21419 'STATE 1 l 10551 10550',
21420 'STATE 5 e 10552 10042',
21421 'STATE 5 m 10042 10553',
21422 'STATE 5 n 10042 10554',
21423 'STATE 5 e 10093 10555',
21424 'STATE 4 h 10058 10556',
21425 'STATE 5 # 10042 10557',
21426 'STATE 4 u 10058 10558',
21427 'STATE 4 e 10042 10559',
21428 'STATE 1 f 10042 10560',
21429 'STATE 5 p 10058 10561',
21430 'STATE 5 l 10042 10058',
21431 'STATE 4 # 10093 10562',
21432 'STATE 5 w 10093 10042',
21433 'STATE 2 o 10042 10563',
21434 'STATE 2 c 10058 10042',
21435 'STATE 2 t 10042 10564',
21436 'STATE 5 r 10058 10565',
21437 'STATE 5 d 10567 10566',
21438 'STATE 4 t 10042 10568',
21439 'STATE 4 e 10042 10569',
21440 'STATE 1 o 10058 10042',
21441 'STATE 2 h 10042 10570',
21442 'STATE 1 i 10058 10571',
21443 'STATE 4 e 10042 10572',
21444 'STATE 5 t 10058 10573',
21445 'STATE 2 e 10575 10574',
21446 'STATE 2 t 10577 10576',
21447 'STATE 2 c 10042 10029',
21448 'STATE 4 a 10042 10578',
21449 'STATE 5 l 10093 10579',
21450 'STATE 2 p 10029 10580',
21451 'STATE 2 r 10042 10581',
21452 'STATE 1 o 10058 10582',
21453 'STATE 2 s 10583 10058',
21454 'STATE 4 e 10042 10584',
21455 'STATE 5 p 10042 10585',
21456 'STATE 1 o 10058 10586',
21457 'STATE 1 n 10058 10587',
21458 'STATE 4 t 10589 10588',
21459 'STATE 2 x 10058 10093',
21460 'STATE 2 d 10093 10058',
21461 'STATE 4 k 10093 10590',
21462 'STATE 2 m 10592 10591',
21463 'STATE 4 m 10594 10593',
21464 'STATE 4 d 10093 10595',
21465 'STATE 2 g 10058 10596',
21466 'STATE 5 i 10598 10597',
21467 'STATE 5 f 10058 10599',
21468 'STATE 1 # 10042 10600',
21469 'STATE 5 n 10601 10042',
21470 'STATE 5 a 10042 10058',
21471 'STATE 2 a 10058 10602',
21472 'STATE 5 v 10058 10603',
21473 'STATE 2 m 10058 10604',
21474 'STATE 4 c 10058 10042',
21475 'STATE 1 l 10058 10605',
21476 'STATE 1 p 10058 10606',
21477 'STATE 2 g 10058 10042',
21478 'STATE 5 i 10607 10042',
21479 'STATE 2 u 10042 10608',
21480 'STATE 5 e 10058 10324',
21481 'STATE 2 a 10042 10609',
21482 'STATE 2 s 10611 10610',
21483 'STATE 2 i 10058 10612',
21484 'STATE 2 v 10058 10042',
21485 'STATE 2 g 10042 10613',
21486 'STATE 1 y 10042 10614',
21487 'STATE 1 h 10093 10042',
21488 'STATE 1 g 10616 10615',
21489 'STATE 4 i 10058 10029',
21490 'STATE 5 n 10617 10042',
21491 'STATE 5 l 10093 10618',
21492 'STATE 1 i 10058 10619',
21493 'STATE 4 a 10058 10620',
21494 'STATE 5 e 10093 10621',
21495 'STATE 1 # 10623 10622',
21496 'STATE 2 v 10042 10624',
21497 'STATE 2 t 10114 10042',
21498 'STATE 4 y 10626 10625',
21499 'STATE 4 e 10058 10042',
21500 'STATE 5 n 10058 10627',
21501 'STATE 2 t 10042 10628',
21502 'STATE 5 s 10042 10629',
21503 'STATE 2 p 10058 10630',
21504 'STATE 2 b 10042 10631',
21505 'STATE 2 b 10633 10632',
21506 'STATE 1 s 10093 10634',
21507 'STATE 1 t 10042 10635',
21508 'STATE 5 n 10636 10042',
21509 'STATE 5 n 10058 10324',
21510 'STATE 4 # 10042 10637',
21511 'STATE 2 t 10093 10638',
21512 'STATE 2 h 10042 10639',
21513 'STATE 4 t 10641 10640',
21514 'STATE 2 b 10058 10642',
21515 'STATE 1 e 10058 10093',
21516 'STATE 5 y 10058 10643',
21517 'STATE 4 t 10093 10644',
21518 'STATE 1 t 10058 10645',
21519 'STATE 1 e 10093 10058',
21520 'STATE 4 n 10647 10646',
21521 'STATE 2 b 10058 10648',
21522 'STATE 2 v 10058 10649',
21523 'STATE 1 s 10042 10650',
21524 'STATE 1 a 10042 10651',
21525 'STATE 4 g 10652 10093',
21526 'STATE 2 f 10058 10093',
21527 'STATE 2 t 10093 10653',
21528 'STATE 4 m 10093 10654',
21529 'STATE 4 m 10093 10655',
21530 'STATE 4 m 10058 10093',
21531 'STATE 2 c 10058 10656',
21532 'STATE 5 s 10657 10042',
21533 'STATE 4 e 10658 10042',
21534 'STATE 2 e 10042 10659',
21535 'STATE 1 s 10661 10660',
21536 'STATE 4 o 10058 10662',
21537 'STATE 1 u 10058 10663',
21538 'STATE 1 e 10058 10664',
21539 'STATE 2 n 10042 10665',
21540 'STATE 2 y 10042 10058',
21541 'STATE 2 y 10042 10666',
21542 'STATE 1 m 10058 10667',
21543 'STATE 1 s 10058 10042',
21544 'STATE 2 m 10058 10042',
21545 'STATE 5 n 10668 10042',
21546 'STATE 5 o 10670 10669',
21547 'STATE 1 p 10042 10671',
21548 'STATE 2 e 10029 10042',
21549 'STATE 4 a 10058 10093',
21550 'STATE 5 n 10672 10042',
21551 'STATE 5 w 10029 10673',
21552 'STATE 4 o 10058 10042',
21553 'STATE 4 y 10093 10674',
21554 'STATE 5 a 10058 10675',
21555 'STATE 2 v 10676 10093',
21556 'STATE 1 a 10042 10656',
21557 'STATE 4 n 10678 10677',
21558 'STATE 1 a 10042 10679',
21559 'STATE 5 e 10042 10680',
21560 'STATE 2 c 10042 10681',
21561 'STATE 2 p 10058 10682',
21562 'STATE 2 c 10058 10683',
21563 'STATE 4 b 10179 10042',
21564 'STATE 5 a 10685 10684',
21565 'STATE 1 l 10058 10686',
21566 'STATE 2 c 10093 10058',
21567 'STATE 1 s 10058 10093',
21568 'STATE 2 s 10042 10058',
21569 'STATE 4 s 10042 10687',
21570 'STATE 5 o 10689 10688',
21571 'STATE 5 e 10029 10690',
21572 'STATE 5 s 10692 10691',
21573 'STATE 2 b 10694 10693',
21574 'STATE 1 a 10696 10695',
21575 'STATE 4 t 10093 10697',
21576 'STATE 4 e 10163 10058',
21577 'STATE 2 p 10699 10698',
21578 'STATE 1 s 10700 10058',
21579 'STATE 1 o 10058 10701',
21580 'STATE 1 e 10093 10702',
21581 'STATE 4 t 10058 10703',
21582 'STATE 1 x 10042 10704',
21583 'STATE 5 c 10058 10042',
21584 'STATE 2 s 10042 10093',
21585 'STATE 2 v 10093 10705',
21586 'STATE 2 m 10058 10706',
21587 'STATE 4 p 10058 10707',
21588 'STATE 5 n 10058 10042',
21589 'STATE 1 s 10058 10708',
21590 'STATE 2 n 10058 10042',
21591 'STATE 3 b 10058 10042',
21592 'STATE 5 b 10058 10709',
21593 'STATE 5 c 10042 10710',
21594 'STATE 1 g 10042 10711',
21595 'STATE 1 i 10042 10058',
21596 'STATE 1 c 10058 10389',
21597 'STATE 1 e 10042 10712',
21598 'STATE 2 k 10058 10713',
21599 'STATE 2 f 10042 10714',
21600 'STATE 2 b 10058 10042',
21601 'STATE 4 d 10555 10715',
21602 'STATE 1 d 10093 10042',
21603 'STATE 2 i 10029 10716',
21604 'STATE 4 a 10042 10093',
21605 'STATE 4 y 10042 10717',
21606 'STATE 5 # 10042 10430',
21607 'STATE 2 k 10689 10093',
21608 'STATE 5 i 10058 10093',
21609 'STATE 5 # 10719 10718',
21610 'STATE 5 # 10720 10042',
21611 'STATE 1 c 10058 10721',
21612 'STATE 4 g 10042 10722',
21613 'STATE 4 f 10042 10723',
21614 'STATE 1 c 10058 10724',
21615 'STATE 1 o 10058 10725',
21616 'STATE 1 s 10093 10726',
21617 'STATE 4 b 10058 10093',
21618 'STATE 4 s 10093 10727',
21619 'STATE 1 m 10042 10567',
21620 'STATE 4 g 10093 10728',
21621 'STATE 4 k 10058 10093',
21622 'STATE 2 w 10042 10729',
21623 'STATE 2 o 10042 10730',
21624 'STATE 1 i 10042 10731',
21625 'STATE 2 u 10042 10732',
21626 'STATE 5 s 10058 10733',
21627 'STATE 2 t 10735 10734',
21628 'STATE 5 a 10093 10058',
21629 'STATE 4 a 10058 10736',
21630 'STATE 2 g 10058 10737',
21631 'STATE 1 s 10738 10058',
21632 'STATE 4 o 10058 10739',
21633 'STATE 2 t 10740 10093',
21634 'STATE 1 d 10058 10741',
21635 'STATE 2 t 10058 10742',
21636 'STATE 2 h 10042 10743',
21637 'STATE 2 c 10744 10093',
21638 'STATE 2 b 10093 10745',
21639 'STATE 5 u 10746 10470',
21640 'STATE 3 p 10042 10747',
21641 'STATE 5 y 10749 10748',
21642 'STATE 2 t 10042 10750',
21643 'STATE 4 a 10154 10751',
21644 'STATE 2 c 10042 10752',
21645 'STATE 2 u 10042 10753',
21646 'STATE 1 s 10755 10754',
21647 'STATE 4 i 10042 10756',
21648 'STATE 5 # 10042 10757',
21649 'STATE 5 n 10759 10758',
21650 'STATE 1 o 10761 10760',
21651 'STATE 2 f 10762 10042',
21652 'STATE 1 g 10042 10763',
21653 'STATE 2 t 10042 10764',
21654 'STATE 5 # 10765 10058',
21655 'STATE 5 # 10042 10766',
21656 'STATE 2 n 10058 10767',
21657 'STATE 1 a 10058 10612',
21658 'STATE 2 e 10093 10768',
21659 'STATE 5 a 10093 10769',
21660 'STATE 5 a 10470 10093',
21661 'STATE 2 m 10042 10770',
21662 'STATE 4 a 10772 10771',
21663 'STATE 4 u 10058 10773',
21664 'STATE 5 s 10775 10774',
21665 'STATE 5 y 10058 10776',
21666 'STATE 5 a 10058 10777',
21667 'STATE 1 s 10093 10058',
21668 'STATE 4 o 10042 10778',
21669 'STATE 4 l 10058 10779',
21670 'STATE 4 s 10093 10058',
21671 'STATE 4 l 10093 10058',
21672 'STATE 1 a 10093 10058',
21673 'STATE 2 v 10093 10058',
21674 'STATE 4 d 10058 10780',
21675 'STATE 1 n 10058 10781',
21676 'STATE 4 t 10093 10058',
21677 'STATE 2 h 10093 10782',
21678 'STATE 4 s 10058 10093',
21679 'STATE 4 u 10042 10783',
21680 'STATE 4 y 10785 10784',
21681 'STATE 1 u 10058 10786',
21682 'STATE 2 c 10042 10787',
21683 'STATE 4 t 10042 10788',
21684 'STATE 2 u 10042 10789',
21685 'STATE 1 p 10058 10790',
21686 'STATE 2 t 10058 10791',
21687 'STATE 2 t 10042 10425',
21688 'STATE 1 h 10042 10792',
21689 'STATE 4 a 10794 10793',
21690 'STATE 5 c 10042 10795',
21691 'STATE 1 m 10042 10796',
21692 'STATE 1 a 10798 10797',
21693 'STATE 4 t 10042 10799',
21694 'STATE 4 t 10058 10042',
21695 'STATE 2 h 10058 10800',
21696 'STATE 2 s 10058 10801',
21697 'STATE 1 l 10058 10802',
21698 'STATE 5 e 10042 10373',
21699 'STATE 5 n 10804 10803',
21700 'STATE 5 o 10093 10805',
21701 'STATE 1 y 10058 10806',
21702 'STATE 2 n 10042 10029',
21703 'STATE 4 e 10808 10807',
21704 'STATE 1 m 10042 10809',
21705 'STATE 4 a 10042 10810',
21706 'STATE 2 c 10058 10811',
21707 'STATE 2 s 10093 10058',
21708 'STATE 1 l 10093 10042',
21709 'STATE 5 o 10058 10093',
21710 'STATE 4 n 10093 10812',
21711 'STATE 4 e 10058 10813',
21712 'STATE 4 n 10058 10093',
21713 'STATE 2 v 10058 10814',
21714 'STATE 4 b 10058 10815',
21715 'STATE 3 g 10042 10816',
21716 'STATE 5 # 10818 10817',
21717 'STATE 2 n 10042 10819',
21718 'STATE 4 t 10042 10058',
21719 'STATE 5 e 10042 10820',
21720 'STATE 1 s 10042 10821',
21721 'STATE 2 o 10042 10822',
21722 'STATE 1 y 10058 10823',
21723 'STATE 1 u 10058 10824',
21724 'STATE 4 e 10042 10825',
21725 'STATE 5 r 10042 10826',
21726 'STATE 1 s 10029 10042',
21727 'STATE 1 j 10042 10827',
21728 'STATE 4 e 10042 10828',
21729 'STATE 2 r 10058 10829',
21730 'STATE 2 t 10042 10830',
21731 'STATE 4 c 10058 10831',
21732 'STATE 1 a 10042 10124',
21733 'STATE 1 e 10058 10042',
21734 'STATE 1 a 10058 10832',
21735 'STATE 5 l 10833 10042',
21736 'STATE 1 a 10042 10058',
21737 'STATE 5 i 10093 10594',
21738 'STATE 1 n 10093 10834',
21739 'STATE 4 o 10836 10835',
21740 'STATE 5 o 10042 10837',
21741 'STATE 2 v 10838 10058',
21742 'STATE 4 e 10552 10058',
21743 'STATE 2 w 10093 10058',
21744 'STATE 1 s 10093 10839',
21745 'STATE 1 m 10058 10840',
21746 'STATE 5 d 10058 10841',
21747 'STATE 2 s 10093 10741',
21748 'STATE 2 e 10042 10842',
21749 'STATE 4 o 10091 10843',
21750 'STATE 1 g 10545 10042',
21751 'STATE 1 e 10042 10844',
21752 'STATE 5 # 10042 10845',
21753 'STATE 2 l 10042 10846',
21754 'STATE 2 i 10042 10668',
21755 'STATE 1 e 10848 10847',
21756 'STATE 1 g 10042 10849',
21757 'STATE 4 y 10042 10850',
21758 'STATE 1 m 10042 10851',
21759 'STATE 4 i 10853 10852',
21760 'STATE 1 w 10029 10042',
21761 'STATE 4 i 10855 10854',
21762 'STATE 2 v 10058 10856',
21763 'STATE 2 n 10058 10857',
21764 'STATE 1 n 10042 10058',
21765 'STATE 1 e 10042 10858',
21766 'STATE 5 e 10093 10859',
21767 'STATE 4 y 10861 10860',
21768 'STATE 2 t 10058 10862',
21769 'STATE 5 d 10058 10863',
21770 'STATE 1 o 10058 10864',
21771 'STATE 1 p 10058 10042',
21772 'STATE 2 m 10093 10865',
21773 'STATE 2 t 10058 10866',
21774 'STATE 1 a 10042 10867',
21775 'STATE 5 s 10869 10868',
21776 'STATE 2 r 10042 10870',
21777 'STATE 5 s 10042 10871',
21778 'STATE 1 t 10042 10872',
21779 'STATE 2 h 10832 10873',
21780 'STATE 2 r 10042 10658',
21781 'STATE 1 a 10042 10874',
21782 'STATE 4 a 10042 10875',
21783 'STATE 2 e 10876 10042',
21784 'STATE 1 t 10042 10877',
21785 'STATE 1 m 10042 10878',
21786 'STATE 5 t 10058 10879',
21787 'STATE 5 a 10042 10880',
21788 'STATE 5 h 10042 10881',
21789 'STATE 2 t 10058 10294',
21790 'STATE 2 m 10042 10058',
21791 'STATE 1 r 10058 10635',
21792 'STATE 2 u 10883 10882',
21793 'STATE 1 e 10042 10058',
21794 'STATE 5 u 10058 10884',
21795 'STATE 5 r 10058 10885',
21796 'STATE 5 g 10042 10058',
21797 'STATE 4 d 10042 10886',
21798 'STATE 5 c 10058 10366',
21799 'STATE 2 s 10042 10887',
21800 'STATE 4 e 10889 10888',
21801 'STATE 4 i 10890 10042',
21802 'STATE 2 u 10042 10891',
21803 'STATE 5 l 10042 10892',
21804 'STATE 2 p 10042 10893',
21805 'STATE 1 n 10058 10894',
21806 'STATE 1 i 10042 10895',
21807 'STATE 4 m 10042 10896',
21808 'STATE 4 # 10042 10897',
21809 'STATE 1 n 10042 10898',
21810 'STATE 5 e 10042 10029',
21811 'STATE 5 u 10839 10899',
21812 'STATE 5 o 10042 10900',
21813 'STATE 2 m 10058 10901',
21814 'STATE 2 y 10903 10902',
21815 'STATE 1 e 10058 10904',
21816 'STATE 1 e 10058 10905',
21817 'STATE 1 n 10042 10906',
21818 'STATE 2 v 10908 10907',
21819 'STATE 2 o 10042 10909',
21820 'STATE 4 a 10911 10910',
21821 'STATE 1 q 10042 10912',
21822 'STATE 2 t 10058 10913',
21823 'STATE 1 a 10058 10914',
21824 'STATE 2 w 10042 10915',
21825 'STATE 2 h 10058 10916',
21826 'STATE 2 i 10042 10917',
21827 'STATE 2 c 10042 10918',
21828 'STATE 4 h 10042 10919',
21829 'STATE 1 v 10042 10920',
21830 'STATE 1 p 10042 10921',
21831 'STATE 2 f 10923 10922',
21832 'STATE 1 c 10058 10924',
21833 'STATE 5 s 10042 10925',
21834 'STATE 1 a 10058 10926',
21835 'STATE 4 l 10058 10042',
21836 'STATE 4 s 10042 10927',
21837 'STATE 2 p 10058 10928',
21838 'STATE 1 o 10058 10929',
21839 'STATE 4 v 10093 10930',
21840 'STATE 4 t 10093 10931',
21841 'STATE 4 i 10042 10932',
21842 'STATE 4 i 10934 10933',
21843 'STATE 1 i 10058 10935',
21844 'STATE 2 p 10042 10936',
21845 'STATE 1 c 10042 10937',
21846 'STATE 1 i 10042 10938',
21847 'STATE 4 k 10042 10939',
21848 'STATE 1 n 10058 10042',
21849 'STATE 2 r 10042 10940',
21850 'STATE 1 n 10042 10941',
21851 'STATE 1 # 10042 10093',
21852 'STATE 4 o 10042 10942',
21853 'STATE 4 a 10944 10943',
21854 'STATE 4 f 10832 10042',
21855 'STATE 1 m 10058 10945',
21856 'STATE 5 s 10058 10946',
21857 'STATE 2 f 10042 10567',
21858 'STATE 4 m 10058 10947',
21859 'STATE 5 a 10058 10042',
21860 'STATE 1 i 10058 10121',
21861 'STATE 1 e 10058 10948',
21862 'STATE 1 s 10093 10949',
21863 'STATE 4 g 10093 10950',
21864 'STATE 2 t 10042 10412',
21865 'STATE 1 l 10951 10042',
21866 'STATE 2 t 10042 10952',
21867 'STATE 5 c 10042 10953',
21868 'STATE 1 e 10058 10954',
21869 'STATE 2 l 10042 10058',
21870 'STATE 1 c 10042 10955',
21871 'STATE 4 l 10042 10956',
21872 'STATE 2 b 10058 10957',
21873 'STATE 2 d 10058 10958',
21874 'STATE 4 y 10029 10959',
21875 'STATE 5 # 10029 10960',
21876 'STATE 1 s 10058 10961',
21877 'STATE 4 c 10042 10962',
21878 'STATE 1 g 10042 10963',
21879 'STATE 2 p 10965 10964',
21880 'STATE 1 f 10058 10121',
21881 'STATE 1 c 10093 10966',
21882 'STATE 4 s 10968 10967',
21883 'STATE 2 m 10042 10294',
21884 'STATE 2 h 10058 10969',
21885 'STATE 5 m 10058 10042',
21886 'STATE 1 c 10058 10970',
21887 'STATE 1 u 10042 10971',
21888 'STATE 5 d 10042 10972',
21889 'STATE 2 n 10973 10058',
21890 'STATE 1 h 10058 10974',
21891 'STATE 1 d 10976 10975',
21892 'STATE 4 e 10978 10977',
21893 'STATE 1 h 10029 10042',
21894 'STATE 1 n 10979 10042',
21895 'STATE 1 t 10042 10980',
21896 'STATE 5 r 10982 10981',
21897 'STATE 4 s 10983 10058',
21898 'STATE 4 n 10093 10984',
21899 'STATE 4 b 10093 10058',
21900 'STATE 1 n 10058 10093',
21901 'STATE 5 e 10985 10042',
21902 'STATE 5 l 10042 10986',
21903 'STATE 2 t 10058 10987',
21904 'STATE 5 a 10042 10988',
21905 'STATE 1 i 10058 10042',
21906 'STATE 1 k 10058 10989',
21907 'STATE 5 t 10029 10042',
21908 'STATE 4 e 10042 10029',
21909 'STATE 1 h 10029 10990',
21910 'STATE 1 h 10042 10991',
21911 'STATE 5 s 10042 10992',
21912 'STATE 2 i 10042 10993',
21913 'STATE 2 w 10327 10994',
21914 'STATE 1 n 10995 10058',
21915 'STATE 5 t 10058 10996',
21916 'STATE 1 e 10058 10744',
21917 'STATE 2 n 10042 10997',
21918 'STATE 5 k 10042 10937',
21919 'STATE 1 o 10042 10998',
21920 'STATE 2 h 10999 10042',
21921 'STATE 2 b 10042 11000',
21922 'STATE 1 m 10042 10029',
21923 'STATE 5 l 10042 10029',
21924 'STATE 4 m 10927 10058',
21925 'STATE 1 h 10042 11001',
21926 'STATE 1 c 11003 11002',
21927 'STATE 2 g 10058 10093',
21928 'STATE 1 m 10093 10777',
21929 'STATE 2 u 10042 11004',
21930 'STATE 2 d 10042 11005',
21931 'STATE 4 e 10042 10058',
21932 'STATE 2 m 10042 11006',
21933 'STATE 5 n 10937 11007',
21934 'STATE 2 t 10058 11008',
21935 'STATE 2 k 10058 10093',
21936 'STATE 2 i 10042 10937',
21937 'STATE 2 i 10042 11009',
21938 'STATE 1 e 10058 11010',
21939 'STATE 1 i 10042 11011',
21940 'STATE 2 b 10058 11012',
21941 'STATE 1 l 10042 10058',
21942 'STATE 2 v 10042 11013',
21943 'STATE 2 t 10801 11014',
21944 'STATE 5 a 11015 10058',
21945 'STATE 1 o 10058 11016',
21946 'STATE 5 c 10042 10058',
21947 'STATE 4 s 11017 10058',
21948 'STATE 2 i 10058 10042',
21949 'STATE 1 i 10093 10058',
21950 'INDEX 11018 s',
21951 'STATE 4 # 11020 11019',
21952 'STATE 4 h 11022 11021',
21953 'STATE 3 t 11024 11023',
21954 'STATE 4 s 11026 11025',
21955 'STATE 3 t 11028 11027',
21956 'STATE 3 s 11030 11029',
21957 'PHONE s',
21958 'STATE 5 h 11032 11031',
21959 'STATE 3 e 11034 11033',
21960 'STATE 1 # 11036 11035',
21961 'PHONE epsilon',
21962 'STATE 3 u 11038 11037',
21963 'STATE 1 n 11024 11039',
21964 'STATE 2 0 11041 11040',
21965 'STATE 3 t 11028 11042',
21966 'STATE 5 p 11044 11043',
21967 'STATE 6 o 11028 11045',
21968 'PHONE sh',
21969 'STATE 3 i 11046 11035',
21970 'STATE 3 i 11048 11047',
21971 'STATE 2 a 11049 11024',
21972 'STATE 2 e 11050 11024',
21973 'STATE 4 t 11052 11051',
21974 'STATE 4 z 11035 11053',
21975 'STATE 4 c 11054 11024',
21976 'STATE 1 0 11028 11055',
21977 'STATE 3 i 11024 11028',
21978 'STATE 2 n 11057 11056',
21979 'STATE 6 n 11024 11035',
21980 'STATE 2 t 11059 11058',
21981 'STATE 2 a 11028 11060',
21982 'STATE 1 h 11024 11061',
21983 'STATE 1 i 11024 11062',
21984 'STATE 3 s 11064 11063',
21985 'STATE 6 w 11065 11024',
21986 'STATE 4 j 11035 11066',
21987 'STATE 6 o 11068 11067',
21988 'STATE 1 # 11070 11069',
21989 'STATE 2 m 11028 11071',
21990 'STATE 1 # 11024 11028',
21991 'STATE 3 k 11024 11072',
21992 'STATE 3 e 11024 11073',
21993 'STATE 2 o 11028 11074',
21994 'PHONE z',
21995 'STATE 1 l 11024 11075',
21996 'STATE 4 k 11024 11076',
21997 'STATE 5 o 11078 11077',
21998 'STATE 1 # 11024 11079',
21999 'STATE 4 r 11081 11080',
22000 'STATE 6 i 11083 11082',
22001 'STATE 2 0 11035 11024',
22002 'STATE 5 o 11085 11084',
22003 'STATE 2 f 11087 11086',
22004 'STATE 1 0 11028 11088',
22005 'STATE 3 p 11024 11089',
22006 'STATE 3 h 11024 11090',
22007 'STATE 2 e 11061 11091',
22008 'STATE 1 u 11024 11092',
22009 'STATE 6 n 11094 11093',
22010 'STATE 4 u 11096 11095',
22011 'STATE 6 n 11035 11024',
22012 'STATE 2 r 11024 11061',
22013 'STATE 6 a 11024 11097',
22014 'STATE 5 i 11024 11035',
22015 'STATE 3 z 11028 11098',
22016 'STATE 1 0 11035 11024',
22017 'STATE 6 a 11100 11099',
22018 'STATE 1 s 11061 11101',
22019 'STATE 5 t 11024 11102',
22020 'STATE 3 o 11024 11103',
22021 'STATE 2 f 11028 11104',
22022 'STATE 3 c 11024 11105',
22023 'STATE 1 i 11024 11106',
22024 'STATE 2 u 11061 11107',
22025 'STATE 1 t 11028 11024',
22026 'STATE 4 z 11109 11108',
22027 'STATE 4 i 11111 11110',
22028 'STATE 2 e 11113 11112',
22029 'STATE 5 r 11035 11114',
22030 'STATE 5 r 11115 11024',
22031 'STATE 1 # 11116 11035',
22032 'STATE 6 o 11028 11117',
22033 'STATE 3 u 11028 11118',
22034 'STATE 3 u 11024 11119',
22035 'STATE 2 b 11121 11120',
22036 'STATE 3 a 11024 11028',
22037 'STATE 2 i 11028 11122',
22038 'STATE 2 k 11124 11123',
22039 'STATE 1 n 11126 11125',
22040 'STATE 1 o 11024 11127',
22041 'STATE 4 m 11129 11128',
22042 'STATE 6 o 11024 11035',
22043 'STATE 4 z 11035 11130',
22044 'STATE 5 o 11132 11131',
22045 'STATE 5 a 11134 11133',
22046 'STATE 1 m 11024 11135',
22047 'STATE 2 i 11136 11024',
22048 'STATE 4 u 11137 11024',
22049 'STATE 6 a 11024 11138',
22050 'STATE 1 w 11140 11139',
22051 'STATE 5 m 11119 11028',
22052 'STATE 2 l 11024 11028',
22053 'STATE 2 g 11103 11141',
22054 'STATE 3 u 11028 11142',
22055 'STATE 1 p 11144 11143',
22056 'STATE 3 f 11024 11145',
22057 'STATE 3 e 11024 11146',
22058 'STATE 1 o 11061 11147',
22059 'STATE 3 a 11024 11061',
22060 'STATE 2 c 11024 11148',
22061 'STATE 4 e 11150 11149',
22062 'STATE 5 # 11061 11151',
22063 'STATE 4 c 11024 11152',
22064 'STATE 5 g 11154 11153',
22065 'STATE 3 n 11035 11155',
22066 'STATE 6 v 11061 11156',
22067 'STATE 4 i 11035 11157',
22068 'STATE 1 # 11024 11158',
22069 'STATE 1 # 11035 11024',
22070 'STATE 6 e 11035 11024',
22071 'STATE 6 e 11159 11035',
22072 'STATE 3 i 11161 11160',
22073 'STATE 5 # 11028 11024',
22074 'STATE 2 d 11162 11028',
22075 'STATE 3 i 11028 11163',
22076 'STATE 1 # 11165 11164',
22077 'STATE 5 u 11028 11166',
22078 'STATE 3 a 11168 11167',
22079 'STATE 1 i 11024 11061',
22080 'STATE 1 t 11061 11169',
22081 'STATE 1 i 11171 11170',
22082 'STATE 4 u 11173 11172',
22083 'STATE 3 r 11024 11174',
22084 'STATE 5 s 11061 11175',
22085 'STATE 4 p 11024 11176',
22086 'PHONE zh',
22087 'STATE 3 e 11061 11024',
22088 'STATE 3 l 11035 11153',
22089 'STATE 6 s 11178 11177',
22090 'STATE 1 l 11028 11024',
22091 'STATE 1 d 11024 11179',
22092 'STATE 3 u 11035 11180',
22093 'STATE 1 e 11028 11181',
22094 'STATE 5 a 11182 11028',
22095 'STATE 3 i 11028 11183',
22096 'STATE 6 # 11024 11184',
22097 'STATE 1 r 11186 11185',
22098 'STATE 2 b 11028 11187',
22099 'STATE 5 l 11028 11188',
22100 'STATE 2 p 11190 11189',
22101 'STATE 2 z 11061 11191',
22102 'STATE 1 l 11061 11192',
22103 'STATE 1 a 11024 11193',
22104 'STATE 2 t 11024 11061',
22105 'STATE 4 c 11195 11194',
22106 'STATE 5 r 11197 11196',
22107 'STATE 3 n 11199 11198',
22108 'STATE 3 r 11024 11200',
22109 'STATE 3 d 11061 11201',
22110 'STATE 1 # 11024 11202',
22111 'STATE 1 p 11061 11024',
22112 'STATE 1 b 11024 11203',
22113 'STATE 2 r 11024 11204',
22114 'STATE 6 c 11028 11205',
22115 'STATE 2 r 11024 11028',
22116 'STATE 3 o 11028 11024',
22117 'STATE 5 i 11028 11103',
22118 'STATE 2 r 11207 11206',
22119 'STATE 2 g 11028 11208',
22120 'STATE 5 o 11024 11209',
22121 'STATE 6 # 11028 11210',
22122 'STATE 3 o 11212 11211',
22123 'STATE 3 o 11061 11024',
22124 'STATE 2 y 11024 11213',
22125 'STATE 1 s 11061 11214',
22126 'STATE 2 k 11061 11024',
22127 'STATE 4 i 11216 11215',
22128 'STATE 5 i 11218 11217',
22129 'STATE 6 l 11153 11219',
22130 'STATE 3 n 11221 11220',
22131 'STATE 2 o 11223 11222',
22132 'STATE 5 y 11061 11224',
22133 'STATE 5 i 11226 11225',
22134 'STATE 3 t 11024 11227',
22135 'STATE 2 i 11024 11228',
22136 'STATE 6 d 11028 11229',
22137 'STATE 3 o 11024 11035',
22138 'STATE 1 l 11028 11230',
22139 'STATE 2 h 11028 11231',
22140 'STATE 5 l 11028 11232',
22141 'STATE 5 # 11233 11024',
22142 'STATE 2 r 11028 11234',
22143 'STATE 5 e 11024 11235',
22144 'STATE 3 h 11237 11236',
22145 'STATE 2 o 11061 11238',
22146 'STATE 1 u 11061 11239',
22147 'STATE 1 a 11061 11190',
22148 'STATE 3 x 11028 11240',
22149 'STATE 5 a 11242 11241',
22150 'STATE 2 e 11243 11024',
22151 'STATE 2 o 11035 11024',
22152 'STATE 3 e 11244 11024',
22153 'STATE 6 e 11153 11245',
22154 'STATE 6 e 11035 11246',
22155 'STATE 5 # 11248 11247',
22156 'STATE 5 r 11250 11249',
22157 'STATE 1 e 11061 11024',
22158 'STATE 6 l 11061 11251',
22159 'STATE 6 c 11061 11024',
22160 'STATE 3 w 11061 11252',
22161 'STATE 1 c 11024 11253',
22162 'STATE 1 f 11024 11254',
22163 'STATE 1 t 11028 11255',
22164 'STATE 1 l 11024 11256',
22165 'STATE 6 r 11028 11257',
22166 'STATE 2 l 11028 11024',
22167 'STATE 2 h 11024 11258',
22168 'STATE 6 n 11260 11259',
22169 'STATE 3 e 11261 11061',
22170 'STATE 2 c 11024 11262',
22171 'STATE 1 u 11264 11263',
22172 'STATE 2 l 11266 11265',
22173 'STATE 4 p 11268 11267',
22174 'STATE 2 p 11270 11269',
22175 'STATE 6 # 11272 11271',
22176 'STATE 5 o 11024 11061',
22177 'STATE 5 m 11061 11273',
22178 'STATE 2 e 11153 11024',
22179 'STATE 6 g 11024 11274',
22180 'STATE 5 d 11276 11275',
22181 'STATE 3 p 11024 11277',
22182 'STATE 3 i 11061 11278',
22183 'STATE 1 # 11061 11279',
22184 'STATE 2 c 11061 11280',
22185 'STATE 1 0 11282 11281',
22186 'STATE 4 o 11284 11283',
22187 'STATE 1 h 11028 11285',
22188 'STATE 6 i 11287 11286',
22189 'STATE 1 b 11028 11288',
22190 'STATE 6 v 11028 11289',
22191 'STATE 2 l 11291 11290',
22192 'STATE 2 r 11140 11024',
22193 'STATE 5 i 11024 11028',
22194 'STATE 1 q 11024 11292',
22195 'STATE 1 i 11061 11293',
22196 'STATE 2 l 11061 11294',
22197 'STATE 2 l 11024 11061',
22198 'STATE 2 c 11024 11295',
22199 'STATE 1 l 11061 11296',
22200 'STATE 4 o 11298 11297',
22201 'STATE 3 w 11061 11024',
22202 'STATE 3 u 11300 11299',
22203 'STATE 6 i 11061 11301',
22204 'STATE 6 k 11024 11302',
22205 'STATE 2 n 11153 11303',
22206 'STATE 5 l 11061 11024',
22207 'STATE 2 i 11035 11024',
22208 'STATE 5 r 11305 11304',
22209 'STATE 3 a 11024 11306',
22210 'STATE 3 a 11308 11307',
22211 'STATE 5 d 11061 11024',
22212 'STATE 1 r 11061 11309',
22213 'STATE 3 d 11061 11310',
22214 'STATE 3 r 11024 11311',
22215 'STATE 3 i 11028 11312',
22216 'STATE 1 g 11314 11313',
22217 'STATE 1 l 11028 11315',
22218 'STATE 1 i 11024 11316',
22219 'STATE 5 u 11028 11317',
22220 'STATE 5 f 11024 11028',
22221 'STATE 1 o 11028 11318',
22222 'STATE 1 b 11028 11319',
22223 'STATE 2 w 11024 11320',
22224 'STATE 6 n 11028 11024',
22225 'STATE 2 f 11024 11321',
22226 'STATE 2 a 11061 11322',
22227 'STATE 2 g 11061 11323',
22228 'STATE 1 a 11061 11324',
22229 'STATE 1 a 11061 11024',
22230 'STATE 3 g 11326 11325',
22231 'STATE 5 r 11328 11327',
22232 'STATE 3 i 11330 11329',
22233 'STATE 5 v 11024 11331',
22234 'STATE 1 e 11061 11332',
22235 'STATE 1 t 11061 11333',
22236 'STATE 3 o 11024 11334',
22237 'STATE 2 r 11336 11335',
22238 'STATE 2 e 11338 11337',
22239 'STATE 3 p 11024 11339',
22240 'STATE 3 l 11024 11340',
22241 'STATE 2 r 11061 11341',
22242 'STATE 3 u 11024 11061',
22243 'STATE 6 s 11061 11342',
22244 'STATE 2 u 11024 11343',
22245 'STATE 4 m 11061 11024',
22246 'STATE 5 i 11345 11344',
22247 'STATE 2 a 11028 11024',
22248 'STATE 1 h 11024 11346',
22249 'STATE 1 c 11348 11347',
22250 'STATE 2 c 11028 11349',
22251 'STATE 2 l 11028 11350',
22252 'STATE 5 e 11352 11351',
22253 'STATE 6 l 11028 11353',
22254 'STATE 1 e 11264 11061',
22255 'STATE 2 g 11061 11024',
22256 'STATE 2 d 11061 11354',
22257 'STATE 2 e 11356 11355',
22258 'STATE 5 e 11358 11357',
22259 'STATE 4 b 11061 11359',
22260 'STATE 3 a 11361 11360',
22261 'STATE 2 v 11061 11362',
22262 'STATE 3 e 11364 11363',
22263 'STATE 5 t 11061 11365',
22264 'STATE 5 # 11024 11366',
22265 'STATE 6 e 11061 11367',
22266 'STATE 3 a 11024 11035',
22267 'STATE 3 a 11153 11024',
22268 'STATE 3 i 11369 11368',
22269 'STATE 5 n 11371 11370',
22270 'STATE 3 i 11061 11372',
22271 'STATE 3 y 11061 11373',
22272 'STATE 1 o 11024 11061',
22273 'STATE 2 w 11061 11374',
22274 'STATE 2 b 11024 11375',
22275 'STATE 1 u 11024 11376',
22276 'STATE 4 o 11024 11377',
22277 'STATE 1 f 11379 11378',
22278 'STATE 2 o 11028 11024',
22279 'STATE 2 u 11140 11024',
22280 'STATE 1 v 11024 11380',
22281 'STATE 5 r 11381 11024',
22282 'STATE 6 f 11028 11382',
22283 'STATE 5 i 11028 11383',
22284 'STATE 1 d 11024 11384',
22285 'STATE 1 d 11028 11385',
22286 'STATE 2 j 11024 11386',
22287 'STATE 1 a 11388 11387',
22288 'STATE 1 r 11390 11389',
22289 'STATE 1 n 11024 11061',
22290 'STATE 2 d 11392 11391',
22291 'STATE 6 # 11394 11393',
22292 'STATE 1 i 11061 11395',
22293 'STATE 1 # 11397 11396',
22294 'STATE 2 e 11398 11024',
22295 'STATE 3 b 11061 11399',
22296 'STATE 2 h 11401 11400',
22297 'STATE 2 r 11403 11402',
22298 'STATE 2 d 11024 11404',
22299 'STATE 6 e 11061 11405',
22300 'STATE 6 g 11061 11406',
22301 'STATE 3 u 11408 11407',
22302 'STATE 2 w 11061 11409',
22303 'STATE 1 # 11411 11410',
22304 'STATE 6 t 11061 11412',
22305 'STATE 2 i 11024 11413',
22306 'STATE 3 l 11024 11414',
22307 'STATE 2 h 11061 11415',
22308 'STATE 1 c 11024 11416',
22309 'STATE 6 t 11418 11417',
22310 'STATE 3 i 11024 11419',
22311 'STATE 1 b 11421 11420',
22312 'STATE 2 u 11024 11422',
22313 'STATE 4 y 11024 11423',
22314 'STATE 6 # 11024 11424',
22315 'STATE 2 l 11426 11425',
22316 'STATE 2 u 11028 11427',
22317 'STATE 5 # 11028 11428',
22318 'STATE 6 s 11024 11028',
22319 'STATE 5 e 11028 11429',
22320 'STATE 2 m 11061 11430',
22321 'STATE 2 r 11061 11395',
22322 'STATE 2 r 11432 11431',
22323 'STATE 2 g 11024 11061',
22324 'STATE 4 l 11434 11433',
22325 'STATE 4 r 11435 11024',
22326 'STATE 1 0 11437 11436',
22327 'STATE 3 i 11028 11438',
22328 'STATE 2 n 11061 11024',
22329 'STATE 3 i 11178 11439',
22330 'STATE 2 r 11441 11440',
22331 'STATE 6 # 11442 11061',
22332 'STATE 2 r 11061 11024',
22333 'STATE 5 e 11024 11443',
22334 'STATE 3 y 11061 11024',
22335 'STATE 6 a 11061 11444',
22336 'STATE 1 # 11061 11445',
22337 'STATE 2 v 11061 11446',
22338 'STATE 6 g 11448 11447',
22339 'STATE 5 t 11061 11024',
22340 'STATE 3 o 11450 11449',
22341 'STATE 2 a 11061 11451',
22342 'STATE 1 r 11061 11452',
22343 'STATE 5 s 11453 11024',
22344 'STATE 3 o 11061 11454',
22345 'STATE 3 o 11061 11455',
22346 'STATE 3 e 11061 11456',
22347 'STATE 1 h 11061 11024',
22348 'STATE 1 b 11061 11457',
22349 'STATE 1 r 11024 11458',
22350 'STATE 6 y 11024 11459',
22351 'STATE 5 a 11024 11061',
22352 'STATE 3 k 11024 11460',
22353 'STATE 1 l 11462 11461',
22354 'STATE 2 u 11024 11463',
22355 'STATE 4 i 11024 11028',
22356 'STATE 1 j 11465 11464',
22357 'STATE 6 i 11028 11024',
22358 'STATE 1 g 11028 11466',
22359 'STATE 6 s 11028 11467',
22360 'STATE 2 c 11028 11468',
22361 'STATE 5 i 11028 11024',
22362 'STATE 2 t 11024 11028',
22363 'STATE 1 l 11024 11469',
22364 'STATE 1 t 11061 11470',
22365 'STATE 1 t 11061 11224',
22366 'STATE 3 p 11024 11471',
22367 'STATE 2 o 11024 11472',
22368 'STATE 3 e 11028 11024',
22369 'STATE 3 u 11024 11473',
22370 'STATE 3 i 11028 11024',
22371 'STATE 4 n 11028 11024',
22372 'STATE 3 y 11474 11024',
22373 'STATE 2 m 11061 11024',
22374 'STATE 6 a 11061 11273',
22375 'STATE 1 r 11024 11061',
22376 'STATE 6 g 11190 11475',
22377 'STATE 5 r 11061 11024',
22378 'STATE 6 e 11061 11024',
22379 'STATE 1 p 11061 11476',
22380 'STATE 5 b 11061 11477',
22381 'STATE 1 # 11024 11061',
22382 'STATE 3 e 11479 11478',
22383 'STATE 6 # 11481 11480',
22384 'STATE 2 m 11061 11482',
22385 'STATE 2 h 11061 11483',
22386 'STATE 3 i 11061 11024',
22387 'STATE 5 m 11061 11024',
22388 'STATE 6 d 11024 11154',
22389 'STATE 1 h 11061 11484',
22390 'STATE 2 e 11486 11485',
22391 'STATE 2 c 11024 11487',
22392 'STATE 5 a 11489 11488',
22393 'STATE 2 r 11491 11490',
22394 'STATE 5 e 11024 11492',
22395 'STATE 5 f 11024 11493',
22396 'STATE 5 # 11028 11494',
22397 'STATE 4 l 11496 11495',
22398 'STATE 6 # 11028 11024',
22399 'STATE 1 o 11028 11497',
22400 'STATE 5 b 11028 11498',
22401 'STATE 2 s 11028 11499',
22402 'STATE 2 n 11501 11500',
22403 'STATE 1 m 11061 11502',
22404 'STATE 4 q 11024 11503',
22405 'STATE 1 r 11061 11024',
22406 'STATE 6 y 11505 11504',
22407 'STATE 2 a 11061 11024',
22408 'STATE 3 a 11507 11506',
22409 'STATE 2 a 11061 11508',
22410 'STATE 5 c 11061 11024',
22411 'STATE 5 y 11510 11509',
22412 'STATE 1 h 11061 11511',
22413 'STATE 2 j 11024 11512',
22414 'STATE 2 p 11061 11513',
22415 'STATE 2 f 11061 11024',
22416 'STATE 6 h 11061 11514',
22417 'STATE 6 # 11516 11515',
22418 'STATE 1 i 11024 11517',
22419 'STATE 3 e 11442 11024',
22420 'STATE 1 l 11024 11061',
22421 'STATE 2 d 11024 11518',
22422 'STATE 2 a 11024 11519',
22423 'STATE 2 c 11024 11520',
22424 'STATE 1 # 11061 11024',
22425 'STATE 6 a 11024 11521',
22426 'STATE 5 s 11024 11522',
22427 'STATE 5 d 11024 11523',
22428 'STATE 1 r 11525 11524',
22429 'STATE 1 r 11024 11526',
22430 'STATE 5 a 11028 11527',
22431 'STATE 3 a 11528 11028',
22432 'STATE 2 t 11028 11024',
22433 'STATE 1 d 11079 11529',
22434 'STATE 1 i 11061 11024',
22435 'STATE 1 p 11024 11530',
22436 'STATE 4 a 11532 11531',
22437 'STATE 3 i 11024 11533',
22438 'STATE 3 i 11061 11507',
22439 'STATE 1 r 11474 11534',
22440 'STATE 2 e 11061 11024',
22441 'STATE 5 # 11024 11535',
22442 'STATE 3 a 11536 11024',
22443 'STATE 3 t 11024 11537',
22444 'STATE 5 t 11024 11538',
22445 'STATE 6 u 11024 11539',
22446 'STATE 2 l 11061 11491',
22447 'STATE 5 s 11061 11540',
22448 'STATE 3 a 11024 11541',
22449 'STATE 1 # 11061 11542',
22450 'STATE 2 t 11024 11543',
22451 'STATE 5 e 11154 11024',
22452 'STATE 3 i 11061 11544',
22453 'STATE 3 o 11024 11545',
22454 'STATE 6 g 11024 11546',
22455 'STATE 2 a 11547 11024',
22456 'STATE 4 i 11024 11314',
22457 'STATE 5 a 11024 11548',
22458 'STATE 6 g 11028 11549',
22459 'STATE 6 r 11028 11024',
22460 'STATE 2 a 11028 11550',
22461 'STATE 1 c 11028 11551',
22462 'STATE 1 n 11024 11552',
22463 'STATE 1 e 11061 11553',
22464 'STATE 3 t 11024 11554',
22465 'STATE 3 r 11024 11555',
22466 'STATE 2 e 11557 11556',
22467 'STATE 2 r 11491 11024',
22468 'STATE 2 o 11061 11558',
22469 'STATE 2 e 11273 11024',
22470 'STATE 1 # 11024 11559',
22471 'STATE 1 g 11024 11560',
22472 'STATE 1 # 11273 11024',
22473 'STATE 6 # 11024 11561',
22474 'STATE 6 s 11061 11024',
22475 'STATE 2 r 11061 11562',
22476 'STATE 2 c 11564 11563',
22477 'STATE 6 r 11024 11061',
22478 'STATE 1 k 11061 11565',
22479 'STATE 1 o 11024 11566',
22480 'STATE 5 c 11028 11024',
22481 'STATE 4 o 11028 11567',
22482 'STATE 4 m 11028 11568',
22483 'STATE 2 t 11028 11569',
22484 'STATE 5 # 11028 11570',
22485 'STATE 2 h 11024 11061',
22486 'STATE 1 i 11061 11571',
22487 'STATE 3 i 11573 11572',
22488 'STATE 5 n 11575 11574',
22489 'STATE 3 d 11061 11576',
22490 'STATE 1 r 11024 11577',
22491 'STATE 2 u 11061 11578',
22492 'STATE 3 l 11024 11061',
22493 'STATE 2 h 11024 11579',
22494 'STATE 1 w 11024 11580',
22495 'STATE 1 s 11024 11581',
22496 'STATE 1 e 11583 11582',
22497 'STATE 3 u 11061 11024',
22498 'STATE 1 l 11061 11584',
22499 'STATE 1 w 11024 11585',
22500 'STATE 5 n 11024 11586',
22501 'STATE 5 r 11024 11587',
22502 'STATE 6 m 11028 11588',
22503 'STATE 1 g 11024 11028',
22504 'STATE 2 d 11061 11589',
22505 'STATE 3 w 11061 11590',
22506 'STATE 4 r 11061 11024',
22507 'STATE 2 v 11061 11591',
22508 'STATE 2 e 11061 11592',
22509 'STATE 3 a 11024 11593',
22510 'STATE 4 b 11061 11594',
22511 'STATE 6 e 11024 11595',
22512 'STATE 6 s 11061 11596',
22513 'STATE 2 e 11597 11024',
22514 'STATE 3 u 11024 11474',
22515 'STATE 1 a 11154 11598',
22516 'STATE 2 r 11061 11453',
22517 'STATE 1 i 11061 11599',
22518 'STATE 6 l 11600 11024',
22519 'STATE 5 s 11024 11601',
22520 'STATE 6 t 11024 11602',
22521 'STATE 1 r 11604 11603',
22522 'STATE 2 s 11024 11061',
22523 'STATE 5 s 11024 11605',
22524 'STATE 5 l 11607 11606',
22525 'STATE 6 # 11061 11541',
22526 'STATE 1 c 11024 11608',
22527 'STATE 1 n 11061 11609',
22528 'STATE 2 r 11061 11610',
22529 'STATE 5 n 11611 11024',
22530 'STATE 5 n 11061 11024',
22531 'STATE 3 i 11061 11612',
22532 'STATE 2 l 11061 11613',
22533 'STATE 4 a 11028 11024',
22534 'STATE 1 n 11615 11614',
22535 'STATE 5 v 11024 11616',
22536 'STATE 6 e 11028 11617',
22537 'STATE 2 e 11028 11182',
22538 'STATE 3 k 11024 11618',
22539 'STATE 3 a 11024 11619',
22540 'STATE 6 e 11024 11620',
22541 'STATE 6 l 11622 11621',
22542 'STATE 3 n 11024 11061',
22543 'STATE 1 # 11024 11623',
22544 'STATE 6 # 11061 11024',
22545 'STATE 1 r 11625 11624',
22546 'STATE 3 a 11312 11626',
22547 'STATE 6 # 11628 11627',
22548 'STATE 5 e 11024 11028',
22549 'STATE 5 # 11024 11629',
22550 'STATE 6 s 11028 11630',
22551 'STATE 3 a 11507 11631',
22552 'STATE 2 e 11024 11632',
22553 'STATE 3 o 11061 11633',
22554 'STATE 4 f 11024 11634',
22555 'STATE 4 n 11024 11061',
22556 'STATE 2 e 11024 11339',
22557 'STATE 2 p 11061 11635',
22558 'STATE 2 i 11061 11024',
22559 'STATE 2 t 11024 11636',
22560 'STATE 6 r 11024 11637',
22561 'STATE 5 d 11024 11028',
22562 'STATE 4 e 11638 11028',
22563 'STATE 2 m 11028 11639',
22564 'STATE 4 f 11024 11640',
22565 'STATE 6 l 11061 11641',
22566 'STATE 1 # 11024 11609',
22567 'STATE 2 o 11024 11642',
22568 'STATE 1 # 11061 11643',
22569 'STATE 4 b 11061 11644',
22570 'STATE 4 e 11024 11645',
22571 'STATE 5 s 11028 11646',
22572 'STATE 6 d 11028 11647',
22573 'STATE 4 n 11024 11648',
22574 'STATE 6 c 11190 11649',
22575 'STATE 2 c 11024 11650',
22576 'STATE 1 l 11061 11651',
22577 'STATE 2 i 11061 11652',
22578 'STATE 1 s 11024 11653',
22579 'STATE 5 d 11028 11024',
22580 'STATE 6 # 11028 11654',
22581 'STATE 2 l 11061 11655',
22582 'STATE 6 i 11564 11656',
22583 'STATE 4 w 11024 11657',
22584 'STATE 2 i 11024 11061',
22585 'STATE 1 h 11024 11658',
22586 'STATE 1 l 11024 11028',
22587 'STATE 1 a 11028 11659',
22588 'STATE 1 f 11024 11660',
22589 'STATE 5 b 11448 11661',
22590 'STATE 1 g 11024 11662',
22591 'STATE 2 e 11024 11663',
22592 'STATE 1 b 11028 11664',
22593 'STATE 1 c 11061 11665',
22594 'STATE 6 e 11024 11666',
22595 'STATE 4 l 11024 11667',
22596 'STATE 4 m 11024 11564',
22597 'STATE 1 m 11028 11668',
22598 'STATE 3 u 11024 11669',
22599 'STATE 2 a 11671 11670',
22600 'STATE 6 r 11672 11061',
22601 'STATE 1 s 11028 11673',
22602 'STATE 3 o 11675 11674',
22603 'STATE 6 s 11024 11676',
22604 'STATE 5 # 11024 11472',
22605 'STATE 2 a 11024 11677',
22606 'STATE 3 a 11140 11028',
22607 'STATE 4 d 11679 11678',
22608 'STATE 5 # 11061 11024',
22609 'STATE 3 u 11680 11534',
22610 'STATE 1 # 11024 11681',
22611 'STATE 3 e 11395 11682',
22612 'STATE 1 d 11061 11683',
22613 'STATE 6 # 11024 11684',
22614 'STATE 3 n 11061 11024',
22615 'STATE 1 h 11024 11685',
22616 'STATE 2 u 11061 11686',
22617 'STATE 5 # 11024 11061',
22618 'STATE 5 r 11061 11687',
22619 'STATE 2 a 11024 11061',
22620 'STATE 3 m 11061 11688',
22621 'STATE 3 r 11024 11689',
22622 'STATE 6 c 11061 11690',
22623 'STATE 2 u 11024 11691',
22624 'STATE 4 v 11061 11692',
22625 'STATE 6 r 11693 11474',
22626 'STATE 2 e 11061 11694',
22627 'STATE 4 b 11061 11686',
22628 'INDEX 11695 t',
22629 'STATE 4 h 11697 11696',
22630 'STATE 5 o 11699 11698',
22631 'STATE 5 e 11701 11700',
22632 'STATE 4 t 11703 11702',
22633 'STATE 4 i 11705 11704',
22634 'STATE 5 # 11707 11706',
22635 'STATE 6 r 11709 11708',
22636 'STATE 4 c 11711 11710',
22637 'STATE 3 e 11713 11712',
22638 'STATE 4 t 11715 11714',
22639 'STATE 3 s 11717 11716',
22640 'STATE 3 s 11719 11718',
22641 'PHONE th',
22642 'STATE 6 # 11721 11720',
22643 'STATE 3 # 11707 11722',
22644 'STATE 4 u 11724 11723',
22645 'STATE 5 h 11726 11725',
22646 'STATE 5 s 11728 11727',
22647 'STATE 5 s 11726 11729',
22648 'STATE 4 u 11731 11730',
22649 'STATE 3 e 11726 11732',
22650 'STATE 3 n 11734 11733',
22651 'PHONE ch',
22652 'STATE 5 o 11736 11735',
22653 'STATE 6 a 11707 11725',
22654 'STATE 6 a 11738 11737',
22655 'STATE 3 n 11707 11739',
22656 'STATE 3 a 11739 11721',
22657 'STATE 3 t 11741 11740',
22658 'STATE 3 # 11725 11742',
22659 'PHONE t',
22660 'PHONE epsilon',
22661 'STATE 6 d 11726 11743',
22662 'STATE 6 # 11745 11744',
22663 'STATE 5 l 11746 11726',
22664 'STATE 3 t 11748 11747',
22665 'STATE 6 u 11717 11725',
22666 'STATE 6 m 11726 11749',
22667 'STATE 6 n 11734 11750',
22668 'PHONE sh',
22669 'STATE 6 # 11752 11751',
22670 'STATE 6 r 11707 11753',
22671 'STATE 6 d 11755 11754',
22672 'STATE 3 # 11707 11756',
22673 'PHONE dh',
22674 'STATE 5 a 11758 11757',
22675 'STATE 4 s 11726 11759',
22676 'STATE 5 r 11761 11760',
22677 'STATE 5 r 11726 11762',
22678 'STATE 3 i 11725 11726',
22679 'STATE 3 o 11725 11763',
22680 'STATE 6 e 11726 11725',
22681 'STATE 4 a 11764 11725',
22682 'STATE 4 r 11725 11765',
22683 'STATE 6 # 11767 11766',
22684 'STATE 6 u 11734 11768',
22685 'STATE 5 a 11770 11769',
22686 'STATE 3 r 11772 11771',
22687 'STATE 3 l 11725 11773',
22688 'STATE 6 i 11707 11774',
22689 'STATE 3 a 11739 11707',
22690 'STATE 3 r 11707 11725',
22691 'STATE 6 h 11776 11775',
22692 'STATE 4 i 11778 11777',
22693 'STATE 6 0 11725 11779',
22694 'STATE 5 a 11717 11780',
22695 'STATE 6 e 11717 11781',
22696 'STATE 6 s 11726 11782',
22697 'STATE 3 a 11726 11725',
22698 'PHONE d',
22699 'STATE 4 o 11725 11726',
22700 'STATE 3 o 11784 11783',
22701 'STATE 3 o 11725 11726',
22702 'STATE 3 a 11734 11725',
22703 'STATE 6 n 11786 11785',
22704 'STATE 6 i 11725 11707',
22705 'STATE 5 y 11707 11787',
22706 'STATE 5 y 11739 11707',
22707 'STATE 3 o 11725 11788',
22708 'STATE 6 y 11739 11789',
22709 'STATE 4 l 11791 11790',
22710 'STATE 4 s 11726 11725',
22711 'STATE 4 g 11793 11792',
22712 'STATE 3 s 11795 11794',
22713 'STATE 5 d 11725 11796',
22714 'STATE 6 a 11798 11797',
22715 'STATE 6 a 11717 11799',
22716 'STATE 6 n 11726 11800',
22717 'STATE 3 u 11725 11801',
22718 'STATE 6 n 11726 11725',
22719 'STATE 6 l 11803 11802',
22720 'STATE 3 r 11739 11755',
22721 'STATE 5 s 11707 11804',
22722 'STATE 6 d 11707 11805',
22723 'STATE 6 s 11807 11806',
22724 'STATE 5 h 11809 11808',
22725 'STATE 3 s 11810 11725',
22726 'STATE 4 r 11725 11811',
22727 'STATE 3 r 11726 11725',
22728 'STATE 3 n 11813 11812',
22729 'STATE 6 # 11725 11717',
22730 'STATE 4 r 11725 11814',
22731 'STATE 5 e 11717 11815',
22732 'STATE 5 l 11717 11816',
22733 'STATE 6 i 11817 11725',
22734 'STATE 5 # 11726 11818',
22735 'STATE 6 n 11725 11819',
22736 'STATE 3 y 11821 11820',
22737 'STATE 5 i 11725 11707',
22738 'STATE 3 n 11707 11822',
22739 'STATE 6 l 11707 11823',
22740 'STATE 3 # 11707 11824',
22741 'STATE 3 o 11739 11755',
22742 'STATE 4 # 11725 11825',
22743 'STATE 4 s 11826 11725',
22744 'STATE 5 e 11726 11725',
22745 'STATE 3 # 11827 11725',
22746 'STATE 3 # 11725 11734',
22747 'STATE 6 l 11717 11828',
22748 'STATE 5 a 11725 11829',
22749 'STATE 3 s 11725 11830',
22750 'STATE 3 r 11717 11725',
22751 'STATE 3 n 11725 11717',
22752 'STATE 6 a 11726 11831',
22753 'STATE 3 a 11832 11726',
22754 'STATE 6 s 11833 11707',
22755 'STATE 5 m 11739 11707',
22756 'STATE 5 a 11707 11739',
22757 'STATE 6 n 11707 11834',
22758 'STATE 3 o 11835 11707',
22759 'STATE 5 n 11837 11836',
22760 'STATE 6 a 11717 11838',
22761 'STATE 4 e 11725 11839',
22762 'STATE 6 t 11734 11840',
22763 'STATE 6 t 11725 11841',
22764 'STATE 6 # 11725 11842',
22765 'STATE 3 a 11844 11843',
22766 'STATE 6 o 11726 11725',
22767 'STATE 3 # 11739 11707',
22768 'STATE 6 g 11707 11845',
22769 'STATE 6 n 11739 11707',
22770 'STATE 6 n 11847 11846',
22771 'STATE 4 e 11848 11725',
22772 'STATE 6 o 11725 11717',
22773 'STATE 4 o 11725 11849',
22774 'STATE 6 # 11734 11725',
22775 'STATE 4 o 11851 11850',
22776 'STATE 3 i 11725 11852',
22777 'STATE 6 # 11726 11853',
22778 'STATE 5 n 11725 11854',
22779 'STATE 3 # 11707 11855',
22780 'STATE 3 d 11857 11856',
22781 'STATE 4 i 11858 11725',
22782 'STATE 3 s 11860 11859',
22783 'STATE 4 w 11725 11861',
22784 'STATE 5 s 11725 11862',
22785 'STATE 5 m 11725 11863',
22786 'STATE 6 e 11864 11725',
22787 'STATE 5 k 11726 11865',
22788 'STATE 5 y 11726 11866',
22789 'STATE 6 u 11725 11867',
22790 'STATE 5 u 11868 11725',
22791 'STATE 4 k 11726 11725',
22792 'STATE 5 e 11768 11725',
22793 'STATE 3 f 11726 11725',
22794 'STATE 6 i 11726 11746',
22795 'STATE 4 s 11725 11726',
22796 'STATE 5 n 11725 11869',
22797 'STATE 5 n 11870 11726',
22798 'STATE 3 r 11717 11871',
22799 'STATE 6 i 11726 11872',
22800 'STATE 6 t 11725 11726',
22801 'STATE 3 a 11707 11873',
22802 'STATE 4 e 11874 11725',
22803 'STATE 5 w 11726 11875',
22804 'STATE 6 # 11726 11725',
22805 'STATE 3 a 11717 11725',
22806 'STATE 3 r 11725 11876',
22807 'STATE 3 r 11707 11877',
22808 'STATE 6 r 11878 11725',
22809 'STATE 5 g 11725 11879',
22810 'STATE 6 k 11725 11880',
22811 'STATE 3 e 11707 11725',
22812 'STATE 3 s 11717 11725',
22813 'STATE 6 k 11725 11881',
22814 'STATE 3 u 11883 11882',
22815 'STATE 5 m 11725 11884',
22816 'STATE 6 g 11726 11885',
22817 'STATE 6 e 11726 11810',
22818 'STATE 6 f 11725 11886',
22819 'STATE 5 i 11746 11887',
22820 'STATE 6 n 11725 11888',
22821 'STATE 6 m 11726 11889',
22822 'STATE 6 d 11726 11890',
22823 'STATE 5 a 11744 11891',
22824 'STATE 6 o 11726 11892',
22825 'STATE 5 l 11767 11893',
22826 'STATE 6 e 11895 11894',
22827 'STATE 5 e 11896 11726',
22828 'STATE 6 l 11898 11897',
22829 'STATE 5 r 11726 11725',
22830 'STATE 6 r 11726 11899',
22831 'STATE 6 y 11726 11900',
22832 'STATE 4 e 11726 11725',
22833 'STATE 6 l 11726 11725',
22834 'STATE 4 n 11725 11901',
22835 'STATE 6 a 11898 11902',
22836 'STATE 4 l 11904 11903',
22837 'STATE 6 b 11726 11905',
22838 'STATE 6 s 11726 11725',
22839 'STATE 5 l 11907 11906',
22840 'STATE 6 s 11909 11908',
22841 'STATE 6 # 11910 11904',
22842 'STATE 4 k 11725 11911',
22843 'STATE 4 e 11725 11726',
22844 'STATE 4 a 11725 11726',
22845 'STATE 6 i 11725 11912',
22846 'STATE 6 m 11725 11913',
22847 'STATE 6 # 11725 11914',
22848 'STATE 4 i 11725 11915',
22849 'STATE 6 r 11726 11725',
22850 'INDEX 11916 u',
22851 'STATE 4 r 11918 11917',
22852 'STATE 3 a 11920 11919',
22853 'STATE 5 y 11922 11921',
22854 'STATE 3 o 11924 11923',
22855 'PHONE epsilon',
22856 'STATE 5 i 11926 11925',
22857 'STATE 3 b 11927 11920',
22858 'STATE 3 q 11929 11928',
22859 'STATE 4 p 11931 11930',
22860 'STATE 5 o 11933 11932',
22861 'STATE 3 # 11935 11934',
22862 'PHONE eh1',
22863 'STATE 5 # 11937 11936',
22864 'STATE 4 e 11939 11938',
22865 'STATE 4 i 11941 11940',
22866 'STATE 5 l 11943 11942',
22867 'STATE 5 a 11945 11944',
22868 'STATE 3 e 11947 11946',
22869 'STATE 3 p 11949 11948',
22870 'STATE 6 n 11951 11950',
22871 'STATE 5 e 11953 11952',
22872 'STATE 4 e 11955 11954',
22873 'STATE 5 a 11957 11956',
22874 'STATE 5 # 11920 11958',
22875 'STATE 4 s 11960 11959',
22876 'STATE 5 s 11961 11957',
22877 'PHONE uw1',
22878 'PHONE ah1',
22879 'STATE 5 e 11963 11962',
22880 'STATE 6 # 11965 11964',
22881 'STATE 3 a 11920 11966',
22882 'STATE 6 p 11949 11967',
22883 'STATE 3 c 11949 11968',
22884 'PHONE y-uh1',
22885 'PHONE y-er',
22886 'PHONE y-er1',
22887 'STATE 5 i 11970 11969',
22888 'STATE 4 s 11972 11971',
22889 'STATE 4 a 11974 11973',
22890 'STATE 3 g 11920 11975',
22891 'STATE 6 # 11977 11976',
22892 'PHONE w',
22893 'STATE 6 # 11979 11978',
22894 'STATE 4 n 11981 11980',
22895 'STATE 5 s 11942 11982',
22896 'PHONE uw',
22897 'STATE 5 r 11984 11983',
22898 'STATE 3 t 11920 11985',
22899 'STATE 3 t 11920 11986',
22900 'PHONE uh1',
22901 'STATE 6 # 11965 11987',
22902 'STATE 6 l 11989 11988',
22903 'STATE 3 f 11949 11990',
22904 'STATE 5 a 11992 11991',
22905 'STATE 3 # 11994 11993',
22906 'STATE 3 # 11996 11995',
22907 'STATE 6 s 11998 11997',
22908 'STATE 4 s 12000 11999',
22909 'STATE 3 g 11957 12001',
22910 'STATE 3 r 11942 12002',
22911 'STATE 4 a 11957 12003',
22912 'STATE 5 l 11957 12004',
22913 'STATE 5 t 11920 12005',
22914 'STATE 5 z 11957 11920',
22915 'STATE 4 t 12007 12006',
22916 'STATE 5 g 12009 12008',
22917 'STATE 5 # 11920 12010',
22918 'STATE 5 u 12011 11920',
22919 'STATE 3 d 12012 11920',
22920 'STATE 3 s 12014 12013',
22921 'STATE 3 c 12016 12015',
22922 'STATE 6 n 11942 11920',
22923 'STATE 6 s 11965 12017',
22924 'PHONE uh',
22925 'STATE 3 b 11927 12018',
22926 'STATE 4 e 12020 12019',
22927 'STATE 4 l 12022 12021',
22928 'STATE 3 m 12024 12023',
22929 'STATE 6 n 11943 12025',
22930 'STATE 3 r 12027 12026',
22931 'STATE 4 n 12029 12028',
22932 'STATE 3 e 12031 12030',
22933 'STATE 3 r 12000 12032',
22934 'STATE 4 m 12000 12033',
22935 'PHONE ax',
22936 'STATE 3 h 11961 11942',
22937 'STATE 3 s 11961 12034',
22938 'STATE 4 i 11957 12035',
22939 'STATE 5 d 11957 12036',
22940 'STATE 5 u 11920 12037',
22941 'STATE 5 h 12039 12038',
22942 'STATE 6 e 12041 12040',
22943 'STATE 6 r 11943 11920',
22944 'STATE 6 e 11920 11943',
22945 'STATE 5 t 12042 11920',
22946 'STATE 3 a 11920 11965',
22947 'PHONE ao1',
22948 'STATE 3 a 11920 12043',
22949 'STATE 6 # 11920 12044',
22950 'STATE 3 g 11950 12045',
22951 'STATE 6 t 11949 11950',
22952 'PHONE y-uw1',
22953 'STATE 3 g 11949 12046',
22954 'STATE 4 a 12048 12047',
22955 'STATE 3 g 11920 12049',
22956 'STATE 3 # 12051 12050',
22957 'STATE 6 t 12053 12052',
22958 'STATE 3 c 12055 12054',
22959 'STATE 4 n 12057 12056',
22960 'STATE 6 m 11943 12058',
22961 'STATE 3 s 12060 12059',
22962 'STATE 4 m 12062 12061',
22963 'STATE 4 t 12017 12000',
22964 'STATE 6 a 12000 12063',
22965 'STATE 3 m 12017 12064',
22966 'STATE 6 r 11920 12017',
22967 'STATE 3 b 11943 12000',
22968 'STATE 3 f 12000 12065',
22969 'STATE 3 d 11942 12066',
22970 'STATE 4 o 11957 11942',
22971 'STATE 5 t 11957 12067',
22972 'STATE 5 r 11920 12068',
22973 'STATE 5 l 12070 12069',
22974 'STATE 4 g 11920 12071',
22975 'STATE 5 e 12073 12072',
22976 'STATE 5 h 11943 11920',
22977 'STATE 6 # 11920 12074',
22978 'STATE 3 g 11950 12075',
22979 'STATE 6 r 11965 12076',
22980 'STATE 3 o 11920 12077',
22981 'STATE 3 m 11949 12078',
22982 'STATE 4 i 12080 12079',
22983 'STATE 3 g 12082 12081',
22984 'STATE 3 r 12084 12083',
22985 'STATE 6 # 11942 12085',
22986 'STATE 4 n 12086 12017',
22987 'STATE 6 r 12088 12087',
22988 'STATE 3 t 12000 12089',
22989 'STATE 3 b 12091 12090',
22990 'STATE 4 s 12093 12092',
22991 'STATE 6 o 11942 12017',
22992 'STATE 6 c 12017 12094',
22993 'STATE 4 n 12017 12095',
22994 'STATE 3 l 12097 12096',
22995 'STATE 4 l 12000 11942',
22996 'STATE 6 t 11961 12098',
22997 'STATE 6 n 12000 11942',
22998 'STATE 6 x 11943 12099',
22999 'STATE 3 f 12017 12100',
23000 'STATE 3 e 12102 12101',
23001 'STATE 3 n 12104 12103',
23002 'STATE 5 n 11957 12105',
23003 'STATE 6 y 11920 11957',
23004 'STATE 4 x 11942 12106',
23005 'STATE 4 b 11943 12107',
23006 'STATE 6 a 11943 12108',
23007 'STATE 5 a 11961 11920',
23008 'STATE 6 d 11920 12109',
23009 'STATE 6 i 11942 11920',
23010 'STATE 3 o 11920 12110',
23011 'STATE 6 s 11920 12111',
23012 'STATE 3 m 11920 12112',
23013 'STATE 3 d 11965 12113',
23014 'STATE 3 # 12115 12114',
23015 'STATE 3 g 12117 12116',
23016 'STATE 5 t 12119 12118',
23017 'STATE 5 r 11920 12120',
23018 'STATE 6 # 12122 12121',
23019 'STATE 5 n 11965 11942',
23020 'STATE 6 t 12124 12123',
23021 'STATE 6 b 12017 12125',
23022 'STATE 3 t 11942 12126',
23023 'STATE 3 c 12128 12127',
23024 'STATE 3 s 12000 12129',
23025 'STATE 3 l 11942 12130',
23026 'STATE 4 s 12132 12131',
23027 'STATE 6 e 12128 12133',
23028 'STATE 6 n 12017 11942',
23029 'STATE 6 z 12128 12134',
23030 'STATE 4 t 12017 11961',
23031 'STATE 3 t 12136 12135',
23032 'STATE 6 n 12137 11942',
23033 'STATE 6 l 11942 12138',
23034 'STATE 6 m 11943 12000',
23035 'STATE 3 b 12017 12139',
23036 'STATE 4 i 11942 12140',
23037 'STATE 4 x 11920 12141',
23038 'STATE 3 l 11942 12142',
23039 'PHONE y-uw',
23040 'STATE 4 i 11957 11920',
23041 'STATE 4 e 12144 12143',
23042 'STATE 4 e 11961 11920',
23043 'STATE 6 e 11920 12145',
23044 'STATE 6 r 11920 11942',
23045 'STATE 3 b 12147 12146',
23046 'STATE 6 d 11965 11920',
23047 'STATE 3 # 11949 12148',
23048 'STATE 3 k 11920 12149',
23049 'STATE 5 o 12151 12150',
23050 'STATE 4 n 12153 12152',
23051 'STATE 3 b 11920 12154',
23052 'STATE 6 h 11957 12155',
23053 'STATE 5 l 12157 12156',
23054 'STATE 3 t 11961 12158',
23055 'STATE 6 a 11957 12159',
23056 'STATE 3 l 12161 12160',
23057 'STATE 3 s 11942 12162',
23058 'STATE 3 h 12164 12163',
23059 'STATE 4 t 12166 12165',
23060 'STATE 6 n 11943 12167',
23061 'STATE 3 c 12128 12168',
23062 'STATE 3 g 12128 12169',
23063 'PHONE y-ax',
23064 'STATE 3 d 12000 12128',
23065 'STATE 3 p 12171 12170',
23066 'STATE 6 o 12017 12172',
23067 'PHONE ih1',
23068 'STATE 6 v 12128 12173',
23069 'STATE 6 s 12128 12017',
23070 'STATE 3 d 12175 12174',
23071 'STATE 4 d 11942 12176',
23072 'STATE 4 m 11943 11942',
23073 'STATE 6 n 12177 11942',
23074 'STATE 3 # 12017 12178',
23075 'STATE 4 y 11920 12179',
23076 'STATE 4 p 11943 11961',
23077 'STATE 3 c 12104 12017',
23078 'STATE 5 t 11920 12180',
23079 'STATE 6 t 11961 11942',
23080 'STATE 6 i 11920 12181',
23081 'STATE 3 c 12183 12182',
23082 'STATE 6 a 11949 11927',
23083 'STATE 6 s 11965 12184',
23084 'STATE 3 a 11920 12185',
23085 'STATE 4 # 12187 12186',
23086 'STATE 6 # 12189 12188',
23087 'STATE 4 p 12191 12190',
23088 'STATE 5 d 12193 12192',
23089 'STATE 3 c 12195 12194',
23090 'STATE 5 t 11920 12196',
23091 'STATE 3 t 12198 12197',
23092 'STATE 3 n 12104 12199',
23093 'STATE 3 d 12201 12200',
23094 'STATE 5 n 11957 12202',
23095 'STATE 3 b 12204 12203',
23096 'STATE 5 n 11961 12205',
23097 'STATE 3 n 12207 12206',
23098 'STATE 3 s 12209 12208',
23099 'STATE 4 m 12017 11942',
23100 'STATE 3 c 12128 12210',
23101 'STATE 3 p 12128 12104',
23102 'STATE 6 l 12000 11943',
23103 'STATE 3 m 12128 12211',
23104 'STATE 3 p 12128 12000',
23105 'STATE 3 f 12213 12212',
23106 'STATE 6 s 11943 12017',
23107 'STATE 4 t 12104 12093',
23108 'STATE 6 n 12128 12017',
23109 'STATE 3 e 12215 12214',
23110 'STATE 4 l 11961 11942',
23111 'STATE 4 t 11942 12216',
23112 'STATE 4 d 11942 12217',
23113 'STATE 3 c 12017 12218',
23114 'STATE 4 z 11961 12219',
23115 'STATE 4 # 11942 12220',
23116 'STATE 6 # 11920 11943',
23117 'STATE 3 p 11949 12221',
23118 'STATE 6 # 11950 11949',
23119 'STATE 3 a 11920 12222',
23120 'STATE 3 o 11920 12223',
23121 'STATE 4 o 12225 12224',
23122 'STATE 3 c 12104 12226',
23123 'STATE 6 u 12228 12227',
23124 'STATE 3 c 12017 11942',
23125 'STATE 5 u 12017 12229',
23126 'STATE 5 h 12000 12230',
23127 'STATE 5 o 11943 12231',
23128 'STATE 6 o 12000 12232',
23129 'STATE 5 n 12234 12233',
23130 'STATE 5 s 11957 11920',
23131 'STATE 6 g 11920 12235',
23132 'STATE 3 n 11942 12236',
23133 'STATE 6 y 11961 12237',
23134 'STATE 3 d 11961 12238',
23135 'STATE 3 l 12104 12239',
23136 'PHONE ax-w',
23137 'STATE 6 # 11920 11957',
23138 'STATE 3 m 12241 12240',
23139 'STATE 5 n 11957 12017',
23140 'STATE 6 e 11965 11942',
23141 'STATE 3 l 12243 12242',
23142 'STATE 5 l 11989 12104',
23143 'STATE 3 g 12245 12244',
23144 'STATE 6 r 11965 12246',
23145 'STATE 4 m 11942 12247',
23146 'STATE 6 # 11942 12248',
23147 'STATE 3 h 12250 12249',
23148 'STATE 4 j 11942 12017',
23149 'STATE 4 y 11920 12251',
23150 'STATE 4 g 12104 12252',
23151 'STATE 4 n 12253 11942',
23152 'STATE 4 b 11942 12000',
23153 'STATE 6 n 11942 12254',
23154 'STATE 4 l 12000 12255',
23155 'STATE 4 v 12257 12256',
23156 'STATE 3 # 11951 12258',
23157 'STATE 6 l 11920 12259',
23158 'STATE 3 e 11920 12260',
23159 'STATE 3 e 12262 12261',
23160 'STATE 5 u 12264 12263',
23161 'STATE 3 e 11942 12265',
23162 'STATE 3 c 12267 12266',
23163 'STATE 4 l 12128 11943',
23164 'STATE 4 h 12269 12268',
23165 'STATE 5 d 12000 12270',
23166 'STATE 6 o 12272 12271',
23167 'STATE 6 e 11943 12273',
23168 'STATE 3 m 11942 12274',
23169 'STATE 3 r 11942 12275',
23170 'STATE 6 d 11920 12276',
23171 'STATE 5 n 12278 12277',
23172 'STATE 6 i 11961 11942',
23173 'STATE 3 t 12280 12279',
23174 'STATE 3 n 12104 12128',
23175 'STATE 3 f 12282 12281',
23176 'STATE 5 l 12104 12017',
23177 'STATE 3 d 11942 12283',
23178 'STATE 5 d 12104 11942',
23179 'STATE 3 n 12285 12284',
23180 'STATE 6 n 11920 12000',
23181 'STATE 6 n 11961 11942',
23182 'STATE 3 d 12000 12286',
23183 'STATE 3 d 12000 11942',
23184 'STATE 3 k 12288 12287',
23185 'STATE 4 m 12104 12289',
23186 'STATE 6 n 12291 12290',
23187 'STATE 6 r 12293 12292',
23188 'STATE 6 # 11942 12000',
23189 'STATE 3 r 11942 12294',
23190 'STATE 4 h 11961 12295',
23191 'STATE 5 a 12297 12296',
23192 'STATE 5 i 11961 11942',
23193 'STATE 6 k 11965 12298',
23194 'STATE 6 n 12300 12299',
23195 'STATE 6 n 12302 12301',
23196 'STATE 5 u 12304 12303',
23197 'STATE 4 p 11943 12305',
23198 'STATE 5 r 11920 12306',
23199 'STATE 3 n 12104 12307',
23200 'STATE 3 g 11961 12308',
23201 'STATE 3 b 12310 12309',
23202 'STATE 4 t 12128 11942',
23203 'STATE 4 m 11943 12311',
23204 'STATE 6 i 11965 11942',
23205 'STATE 5 p 11943 12312',
23206 'STATE 5 u 12000 12313',
23207 'STATE 5 c 11943 12000',
23208 'STATE 6 i 11943 12000',
23209 'STATE 3 s 11942 12314',
23210 'STATE 6 g 11942 12128',
23211 'STATE 6 e 11920 12315',
23212 'STATE 3 s 11957 12316',
23213 'STATE 3 h 11957 12317',
23214 'STATE 3 s 12201 12318',
23215 'STATE 6 i 12201 11961',
23216 'STATE 5 r 12320 12319',
23217 'STATE 5 l 12017 11957',
23218 'STATE 5 r 11920 12321',
23219 'STATE 3 c 12173 12322',
23220 'STATE 4 f 12128 11942',
23221 'STATE 4 g 12000 12323',
23222 'STATE 3 g 11961 12324',
23223 'STATE 6 c 12017 12325',
23224 'STATE 6 a 11942 12326',
23225 'STATE 3 n 12328 12327',
23226 'STATE 4 m 12128 12329',
23227 'STATE 6 # 11943 12330',
23228 'STATE 4 v 11942 12331',
23229 'STATE 6 # 12017 11942',
23230 'STATE 4 k 12000 12332',
23231 'STATE 4 a 11961 12333',
23232 'STATE 4 g 11942 12334',
23233 'STATE 3 l 11965 12335',
23234 'STATE 3 d 11965 11920',
23235 'STATE 3 d 11920 12336',
23236 'STATE 6 z 11920 12337',
23237 'STATE 3 t 11920 12338',
23238 'STATE 3 s 12340 12339',
23239 'STATE 3 c 12342 12341',
23240 'STATE 5 r 11942 12343',
23241 'STATE 6 # 11920 12344',
23242 'STATE 3 c 12104 12345',
23243 'STATE 3 n 11961 12346',
23244 'STATE 3 m 12104 12347',
23245 'STATE 4 t 12128 12017',
23246 'STATE 5 t 11943 12348',
23247 'STATE 6 i 11943 12349',
23248 'STATE 5 w 12000 12350',
23249 'STATE 6 # 12352 12351',
23250 'STATE 5 l 11920 12353',
23251 'STATE 5 d 11957 12354',
23252 'STATE 3 j 11957 11961',
23253 'STATE 3 x 12201 11961',
23254 'STATE 6 a 11957 12355',
23255 'STATE 3 e 11920 12356',
23256 'STATE 3 c 12017 12357',
23257 'STATE 4 t 12359 12358',
23258 'STATE 3 t 12000 12360',
23259 'STATE 6 e 12362 12361',
23260 'STATE 4 l 12104 12062',
23261 'STATE 4 l 12017 11942',
23262 'STATE 3 j 11942 12363',
23263 'STATE 4 t 12000 11942',
23264 'STATE 4 l 12128 12364',
23265 'STATE 6 n 11920 11942',
23266 'STATE 4 t 11942 12365',
23267 'STATE 3 n 11943 12366',
23268 'STATE 6 u 11920 12367',
23269 'STATE 6 # 11942 12175',
23270 'STATE 6 t 11920 12368',
23271 'STATE 3 s 11965 12017',
23272 'STATE 3 j 11965 12369',
23273 'STATE 3 s 11965 11920',
23274 'STATE 4 l 12371 12370',
23275 'STATE 5 r 12373 12372',
23276 'STATE 4 t 12375 12374',
23277 'STATE 4 m 12017 12128',
23278 'STATE 6 a 12104 12376',
23279 'STATE 5 y 11920 12377',
23280 'STATE 3 t 12000 11961',
23281 'STATE 3 l 11961 12378',
23282 'STATE 4 b 12380 12379',
23283 'STATE 5 o 12104 12381',
23284 'STATE 6 a 11943 12382',
23285 'STATE 6 a 12000 12383',
23286 'STATE 5 d 11961 12384',
23287 'STATE 3 r 11942 11961',
23288 'STATE 6 t 11957 12385',
23289 'STATE 5 r 11957 11942',
23290 'STATE 3 k 11965 12386',
23291 'STATE 3 h 11920 11965',
23292 'STATE 5 l 11942 12017',
23293 'STATE 6 m 11942 12387',
23294 'STATE 3 r 11942 12388',
23295 'STATE 4 n 11961 11942',
23296 'STATE 3 e 12390 12389',
23297 'STATE 4 l 11942 12391',
23298 'STATE 3 h 12393 12392',
23299 'STATE 3 j 11942 12017',
23300 'STATE 4 b 11920 11942',
23301 'STATE 4 g 11943 12394',
23302 'STATE 6 r 11920 12395',
23303 'STATE 3 j 11920 12396',
23304 'STATE 6 s 11920 12397',
23305 'STATE 5 h 12399 12398',
23306 'STATE 3 f 12401 12400',
23307 'STATE 4 b 12403 12402',
23308 'STATE 6 e 11961 12404',
23309 'STATE 6 # 11942 12405',
23310 'STATE 3 m 12017 12406',
23311 'STATE 6 c 11920 12407',
23312 'STATE 3 b 11957 12408',
23313 'STATE 3 r 11961 12409',
23314 'STATE 4 d 11942 12410',
23315 'STATE 3 s 12000 12411',
23316 'STATE 4 z 11961 11943',
23317 'STATE 5 t 11943 12412',
23318 'STATE 5 f 12000 12413',
23319 'STATE 3 h 11920 12414',
23320 'STATE 6 i 11920 12415',
23321 'STATE 3 h 12417 12416',
23322 'STATE 3 e 12419 12418',
23323 'STATE 3 l 11961 12420',
23324 'STATE 3 n 11942 12421',
23325 'STATE 6 c 12017 11942',
23326 'STATE 3 r 11942 11943',
23327 'STATE 4 t 12423 12422',
23328 'STATE 4 l 11942 12424',
23329 'STATE 4 p 12426 12425',
23330 'STATE 6 t 11961 12427',
23331 'STATE 3 e 11920 12428',
23332 'STATE 3 t 11965 12429',
23333 'STATE 6 # 12431 12430',
23334 'STATE 4 s 12433 12432',
23335 'STATE 3 b 12435 12434',
23336 'STATE 6 y 12000 12436',
23337 'STATE 5 p 12438 12437',
23338 'STATE 6 c 12000 12439',
23339 'STATE 6 a 11942 11943',
23340 'STATE 4 k 11961 12440',
23341 'STATE 6 r 12017 11942',
23342 'STATE 6 i 11942 12441',
23343 'STATE 5 m 11957 12442',
23344 'STATE 3 k 11942 12443',
23345 'STATE 3 h 12164 12444',
23346 'STATE 3 d 12000 11943',
23347 'STATE 6 r 12000 12445',
23348 'STATE 5 l 12000 12446',
23349 'STATE 3 d 11961 11942',
23350 'STATE 6 n 11920 12447',
23351 'STATE 3 # 11965 12448',
23352 'STATE 5 t 11942 12449',
23353 'STATE 6 s 12451 12450',
23354 'STATE 6 l 12017 11942',
23355 'STATE 3 b 12128 12452',
23356 'STATE 6 o 11942 12453',
23357 'STATE 3 m 12455 12454',
23358 'STATE 3 b 12104 12017',
23359 'STATE 4 t 11942 12456',
23360 'STATE 3 m 12000 12457',
23361 'STATE 3 r 12000 12458',
23362 'STATE 5 i 12460 12459',
23363 'STATE 3 n 11950 12461',
23364 'STATE 6 a 11965 12462',
23365 'STATE 4 y 11920 12463',
23366 'STATE 5 y 12465 12464',
23367 'STATE 4 t 12467 12466',
23368 'STATE 3 b 11965 12468',
23369 'STATE 3 p 12470 12469',
23370 'STATE 5 l 11965 12471',
23371 'STATE 5 n 12000 12472',
23372 'STATE 5 c 12474 12473',
23373 'STATE 4 m 11943 12475',
23374 'STATE 6 l 11943 12476',
23375 'STATE 6 l 11942 12477',
23376 'STATE 6 # 12478 11920',
23377 'STATE 6 o 11957 12479',
23378 'STATE 3 m 11942 11961',
23379 'STATE 3 e 12481 12480',
23380 'STATE 6 e 12000 11943',
23381 'STATE 5 h 12000 12482',
23382 'STATE 6 o 11920 12483',
23383 'STATE 6 d 11942 12484',
23384 'STATE 5 l 11942 11965',
23385 'STATE 3 k 11961 12485',
23386 'STATE 3 l 11942 12486',
23387 'STATE 3 p 12128 12017',
23388 'STATE 6 # 11942 12487',
23389 'STATE 4 p 11942 12488',
23390 'STATE 4 n 12489 12017',
23391 'STATE 6 # 12017 12164',
23392 'STATE 3 b 12000 12490',
23393 'STATE 3 d 11943 12491',
23394 'STATE 5 f 11920 12492',
23395 'STATE 6 n 12494 12493',
23396 'STATE 6 # 11965 12495',
23397 'STATE 3 l 11965 11920',
23398 'STATE 5 c 12497 12496',
23399 'STATE 5 d 12499 12498',
23400 'STATE 4 d 11942 12500',
23401 'STATE 4 g 12502 12501',
23402 'STATE 6 # 12504 12503',
23403 'STATE 3 p 11965 12505',
23404 'STATE 5 l 12507 12506',
23405 'STATE 5 l 11965 12508',
23406 'STATE 6 a 12000 11943',
23407 'STATE 5 f 11989 12509',
23408 'STATE 4 g 12000 12510',
23409 'STATE 6 e 12000 12511',
23410 'STATE 6 h 11943 12512',
23411 'STATE 6 a 11943 12513',
23412 'STATE 6 s 11942 12514',
23413 'STATE 5 z 11920 11942',
23414 'STATE 5 n 11961 11942',
23415 'STATE 6 w 12000 12515',
23416 'STATE 6 g 12017 11920',
23417 'STATE 5 v 12000 12516',
23418 'STATE 5 n 11920 12517',
23419 'STATE 3 c 11957 12518',
23420 'STATE 3 f 11961 12519',
23421 'STATE 4 d 11943 11942',
23422 'STATE 4 c 11942 12520',
23423 'STATE 3 z 11942 12521',
23424 'STATE 6 # 12017 12104',
23425 'STATE 3 r 12523 12522',
23426 'STATE 3 s 12000 12524',
23427 'STATE 5 # 12526 12525',
23428 'STATE 4 l 11942 11920',
23429 'STATE 4 l 11961 11920',
23430 'STATE 3 d 11965 11949',
23431 'STATE 5 l 12528 12527',
23432 'STATE 4 c 12530 12529',
23433 'STATE 5 r 11920 12531',
23434 'STATE 4 n 12532 11943',
23435 'STATE 3 l 11942 12533',
23436 'STATE 6 i 11942 12534',
23437 'STATE 6 e 12017 11943',
23438 'STATE 3 r 12535 11943',
23439 'STATE 3 m 11961 12536',
23440 'STATE 3 c 11965 11943',
23441 'STATE 5 y 11942 12537',
23442 'STATE 6 o 11942 11943',
23443 'STATE 6 o 11965 12538',
23444 'STATE 6 i 11965 12539',
23445 'STATE 6 a 12541 12540',
23446 'STATE 4 c 12000 11943',
23447 'STATE 4 s 12000 12542',
23448 'STATE 5 m 12000 12543',
23449 'STATE 6 e 12545 12544',
23450 'STATE 3 d 11961 12546',
23451 'STATE 5 t 12000 12547',
23452 'STATE 6 a 11920 11957',
23453 'STATE 3 t 11961 12548',
23454 'STATE 3 b 11961 12549',
23455 'STATE 6 g 11943 12550',
23456 'STATE 6 l 11942 12551',
23457 'STATE 3 p 11943 12552',
23458 'STATE 4 n 11943 12553',
23459 'STATE 3 h 12000 11943',
23460 'STATE 6 a 11942 12554',
23461 'STATE 4 d 11920 11942',
23462 'STATE 5 r 12556 12555',
23463 'STATE 4 h 11942 12557',
23464 'STATE 3 b 12558 11943',
23465 'STATE 6 i 12560 12559',
23466 'STATE 3 i 12000 12561',
23467 'STATE 3 f 11943 12562',
23468 'STATE 4 b 11942 12128',
23469 'STATE 3 b 12564 12563',
23470 'STATE 6 e 11943 11942',
23471 'STATE 3 l 11942 12565',
23472 'STATE 3 h 11943 12566',
23473 'STATE 6 i 11943 12567',
23474 'STATE 6 o 11965 12568',
23475 'STATE 5 h 11943 12569',
23476 'STATE 4 s 12000 12570',
23477 'STATE 6 o 12000 12571',
23478 'STATE 6 o 12000 12572',
23479 'STATE 4 s 12017 12573',
23480 'STATE 4 g 12017 12000',
23481 'STATE 6 t 11961 12574',
23482 'STATE 5 b 12575 12000',
23483 'STATE 3 d 11942 12576',
23484 'STATE 3 m 11961 12577',
23485 'STATE 4 m 12579 12578',
23486 'STATE 6 r 12017 12580',
23487 'STATE 3 h 11943 12581',
23488 'STATE 4 t 12000 11943',
23489 'STATE 5 e 12493 12582',
23490 'STATE 4 z 12584 12583',
23491 'STATE 4 h 11965 12585',
23492 'STATE 4 c 11942 12586',
23493 'STATE 4 n 11943 12587',
23494 'STATE 6 o 11942 11961',
23495 'STATE 3 b 11961 11942',
23496 'STATE 3 p 12589 12588',
23497 'STATE 3 l 12000 12590',
23498 'STATE 3 d 11943 12591',
23499 'STATE 6 a 12104 11943',
23500 'STATE 3 r 11961 11942',
23501 'STATE 5 f 12593 12592',
23502 'STATE 5 t 12000 11943',
23503 'STATE 5 l 11965 12594',
23504 'STATE 4 f 12596 12595',
23505 'STATE 4 m 12000 11943',
23506 'STATE 6 r 12000 12167',
23507 'STATE 5 v 12000 12597',
23508 'STATE 6 a 11942 12598',
23509 'STATE 3 r 11942 12599',
23510 'STATE 6 e 11943 12000',
23511 'STATE 5 l 11961 12600',
23512 'STATE 4 k 11961 12601',
23513 'STATE 3 s 11961 12602',
23514 'STATE 6 n 11942 11961',
23515 'STATE 4 l 12604 12603',
23516 'STATE 3 c 11943 12605',
23517 'STATE 4 l 11920 12606',
23518 'STATE 4 s 12608 12607',
23519 'STATE 6 l 11943 12609',
23520 'STATE 3 n 11961 12610',
23521 'STATE 4 p 12612 12611',
23522 'STATE 4 s 11943 11965',
23523 'STATE 5 l 11943 12613',
23524 'STATE 5 s 11965 11943',
23525 'STATE 3 m 12000 11943',
23526 'STATE 3 r 11943 12614',
23527 'STATE 6 a 12567 12615',
23528 'STATE 3 g 11943 12000',
23529 'STATE 6 # 11965 11943',
23530 'STATE 5 d 11943 12616',
23531 'STATE 6 i 12000 11943',
23532 'STATE 5 l 12000 12617',
23533 'STATE 4 b 12000 12618',
23534 'STATE 4 s 12000 12619',
23535 'STATE 3 s 11957 12620',
23536 'STATE 4 n 12622 12621',
23537 'STATE 6 l 12624 12623',
23538 'STATE 6 # 12017 12625',
23539 'STATE 3 c 12017 12626',
23540 'STATE 3 l 12628 12627',
23541 'STATE 6 e 11942 11920',
23542 'STATE 4 h 12630 12629',
23543 'STATE 5 s 12632 12631',
23544 'STATE 6 e 12634 12633',
23545 'STATE 3 l 11942 12635',
23546 'STATE 4 g 12637 12636',
23547 'STATE 3 d 11942 12391',
23548 'STATE 5 z 12524 12638',
23549 'STATE 3 h 11943 12639',
23550 'STATE 6 # 11943 12640',
23551 'STATE 5 s 12642 12641',
23552 'STATE 6 r 12000 12643',
23553 'STATE 3 d 12000 12644',
23554 'STATE 6 n 12646 12645',
23555 'STATE 3 p 11957 11942',
23556 'STATE 4 s 11961 12647',
23557 'STATE 3 d 11943 11942',
23558 'STATE 4 l 12649 12648',
23559 'STATE 4 b 11942 12017',
23560 'STATE 4 g 12017 12650',
23561 'STATE 3 b 12017 12104',
23562 'STATE 3 g 12652 12651',
23563 'STATE 4 b 11943 12000',
23564 'STATE 6 o 11943 12653',
23565 'STATE 6 e 11942 11943',
23566 'STATE 5 t 12654 11943',
23567 'STATE 3 r 12507 11943',
23568 'STATE 5 z 12655 11943',
23569 'STATE 3 b 11943 11961',
23570 'STATE 6 i 11943 12656',
23571 'STATE 6 e 12658 12657',
23572 'STATE 3 g 11961 11943',
23573 'STATE 5 m 11943 12659',
23574 'STATE 6 # 12000 11943',
23575 'STATE 6 y 12000 12660',
23576 'STATE 4 l 12661 11943',
23577 'STATE 4 s 11943 12652',
23578 'STATE 5 t 11943 12662',
23579 'STATE 6 r 12000 11943',
23580 'STATE 4 l 12000 12663',
23581 'STATE 3 l 11961 11942',
23582 'STATE 4 v 11961 12664',
23583 'STATE 3 j 11942 12665',
23584 'STATE 3 j 11942 12666',
23585 'STATE 6 s 12017 12667',
23586 'STATE 3 t 11943 12000',
23587 'STATE 4 n 11943 12000',
23588 'STATE 3 c 12669 12668',
23589 'STATE 6 r 12671 12670',
23590 'STATE 6 i 11942 12507',
23591 'STATE 3 d 12628 11943',
23592 'STATE 6 a 12672 11943',
23593 'STATE 4 b 11942 11943',
23594 'STATE 4 m 12674 12673',
23595 'STATE 5 c 11943 12675',
23596 'STATE 6 o 12000 11943',
23597 'STATE 5 j 12000 12676',
23598 'STATE 6 s 11942 12677',
23599 'STATE 6 y 11961 12678',
23600 'STATE 4 s 11942 12679',
23601 'STATE 3 d 11942 12680',
23602 'STATE 4 n 12017 12681',
23603 'STATE 3 p 11943 12682',
23604 'STATE 4 m 12683 11943',
23605 'STATE 6 a 12684 11943',
23606 'STATE 3 l 12000 11943',
23607 'STATE 4 n 11943 11942',
23608 'STATE 4 t 12686 12685',
23609 'STATE 5 p 11943 12687',
23610 'STATE 5 t 11943 12688',
23611 'STATE 5 s 12596 11943',
23612 'STATE 3 l 11942 12360',
23613 'STATE 3 r 12690 12689',
23614 'STATE 3 d 11942 12691',
23615 'STATE 3 t 11961 11942',
23616 'STATE 6 d 12017 11942',
23617 'STATE 5 z 12693 12692',
23618 'STATE 5 s 12000 12694',
23619 'STATE 3 g 11943 12695',
23620 'STATE 3 j 11943 12696',
23621 'STATE 5 s 11943 12697',
23622 'STATE 5 b 11943 12000',
23623 'STATE 3 c 11943 12698',
23624 'STATE 3 t 11942 12699',
23625 'STATE 6 l 11961 11942',
23626 'STATE 4 d 11942 12700',
23627 'STATE 3 i 12000 12701',
23628 'STATE 6 i 12702 11943',
23629 'STATE 5 v 12000 11943',
23630 'STATE 3 b 11943 12703',
23631 'STATE 5 n 11943 12704',
23632 'STATE 3 c 12000 11943',
23633 'STATE 3 v 11943 12705',
23634 'STATE 6 r 12707 12706',
23635 'STATE 6 s 11942 12708',
23636 'STATE 4 k 12000 12709',
23637 'STATE 4 d 11943 12710',
23638 'STATE 3 m 11943 12000',
23639 'STATE 3 b 11943 12711',
23640 'STATE 3 g 11943 12712',
23641 'STATE 4 d 11942 12713',
23642 'STATE 3 l 11942 11961',
23643 'STATE 6 c 11942 12714',
23644 'STATE 3 l 12716 12715',
23645 'STATE 3 n 11961 11943',
23646 'STATE 3 g 11943 12717',
23647 'STATE 5 g 11943 12718',
23648 'STATE 6 l 11942 12719',
23649 'STATE 3 t 11942 12720',
23650 'STATE 4 m 11943 12721',
23651 'STATE 5 n 12000 12722',
23652 'STATE 4 g 11943 12723',
23653 'STATE 5 s 11943 12724',
23654 'STATE 4 b 11942 12725',
23655 'STATE 4 b 11942 12726',
23656 'STATE 3 r 11943 12727',
23657 'STATE 6 a 12729 12728',
23658 'STATE 3 d 11943 12730',
23659 'STATE 5 k 11943 12731',
23660 'STATE 3 d 12000 12246',
23661 'STATE 6 n 11942 12732',
23662 'STATE 6 a 12734 12733',
23663 'STATE 5 w 11943 12735',
23664 'STATE 4 n 12000 11943',
23665 'STATE 5 g 12737 12736',
23666 'STATE 6 o 11943 12703',
23667 'STATE 6 a 11942 11961',
23668 'STATE 6 s 12590 11943',
23669 'STATE 5 t 11943 12738',
23670 'STATE 5 t 12739 11943',
23671 'STATE 3 f 11943 12740',
23672 'STATE 3 t 12000 11943',
23673 'STATE 3 n 12000 11943',
23674 'STATE 4 t 11943 12445',
23675 'STATE 4 p 12741 11943',
23676 'STATE 5 p 11943 12742',
23677 'STATE 3 r 12000 11943',
23678 'INDEX 12743 v',
23679 'STATE 4 v 12745 12744',
23680 'PHONE v',
23681 'PHONE epsilon',
23682 'INDEX 12746 w',
23683 'STATE 3 o 12748 12747',
23684 'STATE 3 e 12750 12749',
23685 'STATE 5 k 12752 12751',
23686 'STATE 3 a 12754 12753',
23687 'STATE 5 k 12756 12755',
23688 'STATE 6 z 12758 12757',
23689 'STATE 6 i 12756 12759',
23690 'STATE 4 r 12759 12760',
23691 'STATE 4 a 12762 12761',
23692 'STATE 6 z 12764 12763',
23693 'PHONE f',
23694 'STATE 4 a 12766 12765',
23695 'STATE 5 c 12764 12767',
23696 'PHONE epsilon',
23697 'STATE 5 o 12769 12768',
23698 'STATE 5 k 12756 12770',
23699 'STATE 5 l 12759 12767',
23700 'STATE 4 o 12762 12771',
23701 'PHONE v',
23702 'STATE 6 l 12773 12772',
23703 'STATE 5 y 12767 12774',
23704 'PHONE w',
23705 'STATE 3 u 12776 12775',
23706 'STATE 4 h 12777 12767',
23707 'STATE 4 o 12767 12778',
23708 'STATE 4 a 12780 12779',
23709 'STATE 4 o 12767 12759',
23710 'STATE 5 l 12767 12759',
23711 'STATE 1 c 12767 12759',
23712 'STATE 5 r 12782 12781',
23713 'STATE 1 # 12767 12783',
23714 'STATE 6 l 12759 12784',
23715 'STATE 4 h 12767 12785',
23716 'STATE 4 i 12787 12786',
23717 'STATE 5 y 12767 12788',
23718 'STATE 4 e 12767 12789',
23719 'STATE 3 s 12790 12767',
23720 'STATE 4 e 12767 12759',
23721 'STATE 6 o 12767 12759',
23722 'STATE 4 i 12792 12791',
23723 'STATE 4 e 12794 12793',
23724 'STATE 6 d 12767 12795',
23725 'STATE 1 # 12759 12796',
23726 'STATE 5 s 12798 12797',
23727 'STATE 6 t 12767 12799',
23728 'STATE 4 e 12801 12800',
23729 'STATE 6 g 12759 12802',
23730 'STATE 4 h 12802 12759',
23731 'STATE 6 l 12802 12803',
23732 'STATE 6 e 12767 12804',
23733 'STATE 6 e 12767 12805',
23734 'STATE 3 i 12806 12767',
23735 'STATE 6 i 12764 12767',
23736 'STATE 1 a 12759 12807',
23737 'STATE 5 o 12808 12759',
23738 'STATE 1 # 12809 12759',
23739 'STATE 1 # 12759 12767',
23740 'STATE 5 d 12759 12810',
23741 'STATE 1 e 12767 12811',
23742 'STATE 6 k 12767 12812',
23743 'STATE 1 s 12764 12767',
23744 'STATE 6 d 12759 12767',
23745 'STATE 1 # 12813 12759',
23746 'STATE 6 # 12759 12764',
23747 'STATE 5 l 12759 12814',
23748 'STATE 5 s 12759 12815',
23749 'STATE 6 # 12759 12816',
23750 'STATE 6 n 12759 12764',
23751 'STATE 5 r 12759 12817',
23752 'STATE 5 n 12759 12818',
23753 'STATE 1 s 12759 12819',
23754 'STATE 5 s 12759 12820',
23755 'STATE 6 t 12759 12821',
23756 'STATE 5 r 12767 12773',
23757 'STATE 5 y 12759 12822',
23758 'STATE 6 # 12759 12767',
23759 'STATE 6 t 12759 12823',
23760 'STATE 5 n 12759 12824',
23761 'STATE 5 # 12759 12767',
23762 'INDEX 12825 x',
23763 'STATE 3 u 12827 12826',
23764 'STATE 2 0 12829 12828',
23765 'STATE 4 # 12831 12830',
23766 'STATE 3 e 12832 12830',
23767 'PHONE z',
23768 'PHONE k-s',
23769 'STATE 2 l 12830 12833',
23770 'STATE 4 a 12835 12834',
23771 'PHONE epsilon',
23772 'STATE 4 u 12837 12836',
23773 'STATE 2 # 12839 12838',
23774 'STATE 4 h 12839 12840',
23775 'STATE 2 s 12841 12839',
23776 'STATE 2 l 12839 12830',
23777 'PHONE g-z',
23778 'STATE 4 e 12843 12842',
23779 'PHONE k-sh',
23780 'STATE 4 i 12845 12844',
23781 'STATE 2 # 12839 12830',
23782 'STATE 4 o 12839 12830',
23783 'STATE 2 l 12830 12846',
23784 'STATE 2 m 12830 12843',
23785 'INDEX 12847 y',
23786 'STATE 4 # 12849 12848',
23787 'STATE 2 0 12851 12850',
23788 'STATE 3 a 12853 12852',
23789 'STATE 3 a 12855 12854',
23790 'STATE 5 a 12857 12856',
23791 'STATE 3 o 12853 12858',
23792 'PHONE epsilon',
23793 'STATE 3 o 12860 12859',
23794 'STATE 4 a 12862 12861',
23795 'PHONE y',
23796 'STATE 4 e 12856 12863',
23797 'STATE 3 f 12865 12864',
23798 'STATE 3 e 12867 12866',
23799 'STATE 4 o 12869 12868',
23800 'STATE 4 u 12853 12870',
23801 'STATE 5 m 12856 12871',
23802 'PHONE iy',
23803 'STATE 3 e 12873 12872',
23804 'STATE 2 i 12875 12874',
23805 'STATE 1 0 12877 12876',
23806 'STATE 4 e 12879 12878',
23807 'STATE 5 m 12856 12853',
23808 'STATE 2 t 12856 12853',
23809 'STATE 4 o 12853 12880',
23810 'STATE 2 b 12853 12881',
23811 'STATE 3 u 12875 12882',
23812 'STATE 2 l 12863 12883',
23813 'STATE 2 f 12863 12875',
23814 'PHONE ay1',
23815 'STATE 4 a 12885 12884',
23816 'STATE 3 s 12887 12886',
23817 'STATE 1 # 12853 12888',
23818 'STATE 2 m 12890 12889',
23819 'STATE 5 v 12875 12853',
23820 'STATE 2 r 12853 12891',
23821 'STATE 2 f 12892 12863',
23822 'STATE 2 n 12863 12893',
23823 'STATE 1 # 12895 12894',
23824 'STATE 1 # 12897 12896',
23825 'STATE 5 e 12875 12898',
23826 'STATE 5 o 12900 12899',
23827 'STATE 2 n 12863 12901',
23828 'STATE 5 r 12903 12902',
23829 'STATE 1 # 12875 12904',
23830 'STATE 2 k 12875 12905',
23831 'STATE 3 l 12875 12863',
23832 'STATE 2 s 12863 12906',
23833 'STATE 5 e 12908 12907',
23834 'STATE 2 a 12910 12909',
23835 'STATE 3 i 12912 12911',
23836 'STATE 3 i 12856 12875',
23837 'STATE 4 o 12914 12913',
23838 'STATE 4 r 12916 12915',
23839 'STATE 4 n 12917 12916',
23840 'STATE 5 # 12863 12918',
23841 'STATE 5 d 12853 12875',
23842 'STATE 2 b 12875 12853',
23843 'PHONE ay',
23844 'STATE 5 n 12853 12919',
23845 'STATE 2 v 12920 12863',
23846 'STATE 4 n 12922 12921',
23847 'STATE 3 r 12863 12923',
23848 'STATE 2 o 12925 12924',
23849 'STATE 3 n 12863 12916',
23850 'STATE 5 n 12926 12856',
23851 'STATE 5 # 12853 12856',
23852 'STATE 4 u 12856 12927',
23853 'STATE 3 k 12856 12928',
23854 'STATE 5 e 12875 12916',
23855 'PHONE ih1',
23856 'PHONE ax',
23857 'STATE 2 l 12863 12853',
23858 'STATE 2 p 12853 12875',
23859 'STATE 1 a 12863 12929',
23860 'STATE 5 n 12931 12930',
23861 'STATE 5 a 12904 12932',
23862 'STATE 1 p 12934 12933',
23863 'STATE 2 e 12936 12935',
23864 'STATE 4 m 12916 12917',
23865 'STATE 2 e 12856 12937',
23866 'STATE 4 a 12939 12938',
23867 'STATE 5 n 12875 12940',
23868 'STATE 1 o 12863 12941',
23869 'STATE 4 k 12943 12942',
23870 'STATE 4 i 12944 12937',
23871 'STATE 2 a 12946 12945',
23872 'STATE 2 g 12916 12947',
23873 'STATE 4 m 12917 12863',
23874 'STATE 3 s 12875 12948',
23875 'STATE 3 g 12917 12916',
23876 'STATE 3 n 12856 12863',
23877 'STATE 4 e 12875 12949',
23878 'STATE 5 n 12904 12875',
23879 'STATE 3 m 12875 12856',
23880 'STATE 1 l 12863 12853',
23881 'STATE 4 l 12951 12950',
23882 'STATE 5 # 12952 12916',
23883 'STATE 3 f 12875 12953',
23884 'STATE 2 e 12917 12954',
23885 'STATE 3 r 12952 12916',
23886 'STATE 4 l 12956 12955',
23887 'STATE 5 e 12875 12957',
23888 'STATE 4 r 12959 12958',
23889 'STATE 4 e 12961 12960',
23890 'STATE 5 # 12917 12962',
23891 'PHONE ih',
23892 'STATE 3 l 12964 12963',
23893 'STATE 5 s 12916 12965',
23894 'STATE 3 d 12875 12966',
23895 'STATE 2 s 12875 12917',
23896 'STATE 4 e 12875 12967',
23897 'STATE 3 h 12969 12968',
23898 'STATE 5 o 12875 12970',
23899 'STATE 4 o 12972 12971',
23900 'STATE 3 u 12853 12973',
23901 'STATE 3 r 12975 12974',
23902 'STATE 2 r 12863 12976',
23903 'STATE 2 l 12863 12875',
23904 'STATE 1 r 12917 12977',
23905 'STATE 4 n 12875 12978',
23906 'STATE 3 k 12875 12979',
23907 'STATE 4 n 12981 12980',
23908 'STATE 5 n 12916 12982',
23909 'STATE 5 a 12875 12983',
23910 'STATE 4 u 12856 12984',
23911 'STATE 5 # 12856 12863',
23912 'STATE 5 # 12875 12985',
23913 'STATE 2 a 12917 12986',
23914 'STATE 1 m 12917 12863',
23915 'STATE 3 r 12875 12863',
23916 'STATE 5 i 12916 12987',
23917 'STATE 4 p 12875 12988',
23918 'STATE 4 o 12990 12989',
23919 'STATE 5 o 12992 12991',
23920 'STATE 3 d 12875 12916',
23921 'STATE 5 t 12916 12875',
23922 'STATE 3 l 12916 12993',
23923 'STATE 4 r 12995 12994',
23924 'STATE 3 m 12863 12996',
23925 'STATE 3 b 12916 12917',
23926 'STATE 3 w 12916 12997',
23927 'STATE 1 e 12999 12998',
23928 'STATE 3 u 12875 13000',
23929 'STATE 3 r 12875 12853',
23930 'STATE 3 c 13002 13001',
23931 'STATE 4 c 12904 12875',
23932 'STATE 3 m 12853 13003',
23933 'STATE 5 t 13005 13004',
23934 'STATE 2 o 12863 12853',
23935 'STATE 3 l 13006 12856',
23936 'STATE 3 s 12916 13007',
23937 'STATE 2 a 12875 13008',
23938 'STATE 2 n 12875 12863',
23939 'STATE 4 n 12916 13009',
23940 'STATE 5 a 13011 13010',
23941 'STATE 4 c 12875 13012',
23942 'STATE 5 i 12875 12916',
23943 'STATE 4 c 13014 13013',
23944 'STATE 3 l 12917 12916',
23945 'STATE 5 a 12856 12863',
23946 'STATE 2 r 12916 13015',
23947 'STATE 1 c 12863 13016',
23948 'STATE 5 n 12875 13017',
23949 'STATE 3 m 12916 13018',
23950 'STATE 3 l 12875 13019',
23951 'STATE 4 p 12875 12916',
23952 'STATE 4 i 12972 13020',
23953 'STATE 3 c 13022 13021',
23954 'STATE 1 e 12917 12916',
23955 'STATE 3 l 12863 13023',
23956 'STATE 4 l 12875 13024',
23957 'STATE 4 m 12916 13025',
23958 'STATE 3 b 12875 13026',
23959 'STATE 3 l 13028 13027',
23960 'STATE 3 z 12916 13029',
23961 'STATE 2 i 12952 12875',
23962 'STATE 2 o 12875 13030',
23963 'STATE 5 o 12875 13031',
23964 'STATE 3 r 12916 13032',
23965 'STATE 4 l 12916 13033',
23966 'STATE 3 z 13035 13034',
23967 'STATE 2 l 13037 13036',
23968 'STATE 2 o 13038 12916',
23969 'STATE 4 r 12875 13039',
23970 'STATE 2 f 12875 13040',
23971 'STATE 4 i 12875 13041',
23972 'STATE 4 b 12916 12875',
23973 'STATE 4 d 13043 13042',
23974 'STATE 4 b 12917 12875',
23975 'STATE 4 t 13045 13044',
23976 'STATE 4 s 12917 12863',
23977 'STATE 1 p 12952 12863',
23978 'STATE 3 h 12875 12904',
23979 'STATE 2 s 13047 13046',
23980 'STATE 5 u 12916 13048',
23981 'STATE 1 o 12916 13049',
23982 'STATE 3 h 12875 12863',
23983 'STATE 5 i 12917 13050',
23984 'STATE 2 a 12916 12917',
23985 'STATE 2 p 12916 13051',
23986 'STATE 3 z 12916 12875',
23987 'STATE 3 z 12916 13052',
23988 'STATE 1 r 12916 13053',
23989 'STATE 1 p 13054 12916',
23990 'STATE 4 p 12916 13055',
23991 'STATE 5 h 12875 13056',
23992 'STATE 4 p 12916 13057',
23993 'STATE 4 g 12916 13058',
23994 'STATE 5 h 12916 13059',
23995 'STATE 3 d 12916 13060',
23996 'STATE 3 s 12917 13061',
23997 'STATE 5 a 12917 12863',
23998 'STATE 3 h 12875 13062',
23999 'STATE 5 s 12916 13063',
24000 'STATE 3 n 13064 12863',
24001 'STATE 2 c 12916 13065',
24002 'STATE 3 b 12875 13066',
24003 'STATE 2 o 12917 12863',
24004 'STATE 3 r 12916 12875',
24005 'STATE 4 d 12916 13067',
24006 'STATE 5 i 12875 13068',
24007 'STATE 3 l 12875 13069',
24008 'STATE 3 w 12875 12916',
24009 'INDEX 13070 z',
24010 'STATE 3 t 13072 13071',
24011 'STATE 4 z 13074 13073',
24012 'STATE 4 # 13076 13075',
24013 'STATE 3 c 13074 13077',
24014 'PHONE epsilon',
24015 'STATE 4 e 13079 13078',
24016 'PHONE s',
24017 'STATE 3 s 13074 13080',
24018 'STATE 4 s 13074 13081',
24019 'PHONE z',
24020 'STATE 3 z 13083 13082',
24021 'STATE 4 i 13079 13084',
24022 'STATE 3 d 13086 13085',
24023 'STATE 4 l 13079 13087',
24024 'STATE 4 o 13079 13076',
24025 'STATE 4 s 13074 13088',
24026 'STATE 4 i 13074 13089',
24027 'STATE 4 # 13079 13090',
24028 'STATE 4 h 13092 13091',
24029 'STATE 4 e 13079 13074',
24030 'STATE 4 y 13079 13093',
24031 'STATE 3 r 13079 13094',
24032 'STATE 3 # 13095 13079',
24033 'STATE 4 o 13079 13096',
24034 'STATE 4 # 13079 13097',
24035 'PHONE zh',
24036 'STATE 4 e 13079 13098',
24037 'STATE 3 l 13099 13079',
24038 'PHONE t-s',
24039 'STATE 4 b 13098 13079',
24040 ];
24041
24042
24043 // ///////////////////////////// End Functions ////////////////////////////////////
24044
24045 /*if (window.requestAnimationFrame) { // not used at moment
24046
24047 window.requestAnimationFrame = (function () {
24048 return window.webkitRequestAnimationFrame ||
24049 window.mozRequestAnimationFrame ||
24050 window.oRequestAnimationFrame ||
24051 window.msRequestAnimationFrame ||
24052 function ( callback,element) {
24053 window.setTimeout(callback, 1000 / RiText.frameRate); // Fallback timeout
24054 };
24055 })();
24056 }*/
24057
24058 /////////////////////////////////////////////////////////////////////////////////////////
24059
24060 var hasProcessing = (typeof Processing !== 'undefined');
24061
24062 if (hasProcessing) {
24063
24064 Processing.registerLibrary("RiTa", {
24065
24066 //log("Processing.registerLibrary()");
24067 p : null,
24068
24069 init : function(obj) {
24070 //log("Processing.registerLibrary.init: ");
24071 },
24072
24073 attach : function(p5) {
24074 p = p5;
24075 //log("Processing.registerLibrary.attach");
24076 RiText.renderer = new RiText_P5(p5);
24077 },
24078
24079 detach : function(p5) {
24080 //log("Processing.registerLibrary.detach");
24081 }
24082
24083 //exports : [] // export global function names?
24084 })
24085 }
24086 else {
24087
24088 var cnv = document.getElementsByTagName("canvas")[0];
24089 try {
24090 var context2d = cnv.getContext("2d");
24091 RiText.renderer = new RiText_Canvas(context2d);
24092 }
24093 catch(e) {
24094 //console.warn("[RiTa] No object w' name='canvas' in DOM, renderer will be unavailable");
24095 }
24096 }
24097
24098 console && console.log("[INFO] RiTa.version ["+RiTa.VERSION+RiTa.PHASE+"]");
24099
24100 /////////////////////////////////////////////////////////////////////////////////////////
24101 // Core RiTa objects (in global namespace)
24102 /////////////////////////////////////////////////////////////////////////////////////////
24103
24104 window['RiString'] = RiString;
24105 window['RiLexicon'] = RiLexicon;
24106 window['RiGrammar'] = RiGrammar;
24107 window['RiMarkov'] = RiMarkov;
24108 window['RiText'] = RiText;
24109 window['RiTa'] = RiTa;
24110
24111 RiTa.p5Compatible(true); // TODO: pick a default? false...
24112
24113 // For Testing
24114 window['RiLetterToSound'] = LetterToSound;
24115
24116 })(window);
24117
24118